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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top