2009-02-03 15 views
7

Meine Anwendung dauert einige Sekunden, um das erste Fenster mit einem Canvas3D darin anzuzeigen. Ich habe es profiliert und festgestellt, dass der Flaschenhals in SimpleUniverse.getPreferredConfiguration() liegt; Der erste Anruf dauert drei oder vier Sekunden, und es muss aufgerufen werden, bevor die Szene gerendert werden kann.Wie kann ich Java3D schneller starten?

Ich benutze den Direct3D-Renderer (-Dj3d.rend=d3d), weil der OpenGL-Renderer auf meiner Grafikkarte abstürzt. Ich habe eine integrierte ATI-Karte mit einem einzigen Monitor.

Antwort

12

Der Grund für die Verlangsamung ist, dass GraphicsDevice.getConfigurations(), die von SimpleUniverse.getPreferredConfiguration() verwendet wird, auf einigen Systemen sehr langsam ist. Siehe this java.net forum thread, was zu this Java3D bug verbindet, die wiederum Links zu this Sun bug:

Das Problem ist, dass ::DescribePixelFormat Win32 Aufruf langsam ist - nimmt bis zu 60 ms zu vervollständigen. ...
Mit der vorgeschlagenen Problemumgehung (welche elminats die angreifenden Win32-Aufrufe) die Zeit ist deutlich verbessert (zu, wie, 0ms).

Die Abhilfe erwähnt ist Pass -Dsun.awt.nopixfmt=true der JVM, die die zugrunde liegenden nativen Code macht DescribePixelFormat nicht nennen.

Diese scheinbar ist keine perfekte Lösung:

... einige Anwendungen, die OpenGL mit Java verwenden, möglicherweise nicht korrekt funktionieren.

Aber da ich Direct3D sowieso verwendet habe, ist das kein Problem. Dies schnitt 3,2 Sekunden der Startzeit ab.

+0

Ich habe gerade diese Umgehungslösung gestern gefunden, also mache ich eine öffentliche Aufzeichnung, damit ich sie nicht wieder verliere. –

+0

Wie übergeben -Dsun.awt.nopixfmt = true zu jvm? oder Wie kann ich das Graphics Configuration-Objekt in java3D nicht mehr aufrufen? – Jay

Verwandte Themen