Como posso fazer Java3D iniciar mais rápido?
-
21-08-2019 - |
Pergunta
Meu aplicativo leva alguns segundos para mostrar a primeira janela com uma Canvas3D
nele. Eu tenho perfilado-lo e descobriu que o gargalo está em SimpleUniverse.getPreferredConfiguration()
; a primeira chamada leva três ou quatro segundos, e deve ser chamado antes da cena pode ser processado.
Eu estou usando o renderizador Direct3D (-Dj3d.rend=d3d
), porque o renderizador OpenGL cai no meu cartão de gráficos. Eu tenho uma placa ATI integrado executando um único monitor.
Solução
A razão para a desaceleração é que GraphicsDevice.getConfigurations()
, que é usado por SimpleUniverse.getPreferredConfiguration()
, é muito lento em alguns sistemas. Consulte este java.net tópico do fórum, que links para este bug Java3D, que por sua vez links para este Sun bug :?
O problema é que
::DescribePixelFormat
Win32 chamada é lento - leva até 60ms para ser concluído. ...
Com a solução sugerida (que elminats [sic] as chamadas Win32 infrator) o tempo é significativamente melhorada (para, como, 0ms).
A solução mencionada é a -Dsun.awt.nopixfmt=true
passe para o JVM , o que torna o código nativo subjacente não DescribePixelFormat
chamada.
Este, aparentemente, não é uma solução perfeita:
... alguns aplicações que usam OpenGL com Java pode não funcionar corretamente.
Mas desde que eu estava usando Direct3D qualquer maneira, não é um problema. Este corte de 3,2 segundos fora do tempo de inicialização.