Как я могу сделать запуск Java3D быстрее? - PullRequest
7 голосов
/ 03 февраля 2009

Моему приложению требуется несколько секунд, чтобы показать первое окно с Canvas3D в нем. Я профилировал это и обнаружил, что узкое место находится в SimpleUniverse.getPreferredConfiguration(); первый вызов занимает три или четыре секунды, и он должен быть вызван до того, как сцена может быть воспроизведена.

Я использую рендерер Direct3D (-Dj3d.rend=d3d), потому что рендерер OpenGL падает на моей видеокарте. У меня есть встроенная карта ATI, на которой установлен один монитор.

1 Ответ

12 голосов
/ 03 февраля 2009

Причина замедления в том, что GraphicsDevice.getConfigurations(), который используется SimpleUniverse.getPreferredConfiguration(), очень медленный в некоторых системах. См. эту ветку форума java.net , которая ссылается на эту ошибку Java3D , которая, в свою очередь, ссылается на эту ошибку Sun :

Проблема в том, что ::DescribePixelFormat Win32 вызов медленный - занимает до 60 мс для завершения. ...
С предложенным обходным путем (который elminats [sic] вызывает вызывающий win32) время значительно улучшается (до 0 мс).

Упомянутое обходное решение - передать -Dsun.awt.nopixfmt=true в JVM , что делает основной нативный код не вызывающим DescribePixelFormat.

Это, видимо, не идеальное решение:

... некоторые приложения, использующие OpenGL с Java, могут работать неправильно.

Но так как я все равно использовал Direct3D, это не проблема. Это сократило время запуска на 3,2 секунды.

...