如何让Java3D启动更快?

7
我的应用程序需要几秒钟的时间才能显示第一个带有Canvas3D的窗口。 我已经对其进行了分析,发现瓶颈在SimpleUniverse.getPreferredConfiguration()中; 第一次调用需要三到四秒,并且在场景渲染之前必须调用它。
我正在使用Direct3D渲染器(-Dj3d.rend=d3d),因为OpenGL渲染器会在我的图形卡上崩溃。我有一个集成的ATI卡运行单个监视器。
1个回答

12
减速的原因是某些系统上GraphicsDevice.getConfigurations()很慢,该方法被SimpleUniverse.getPreferredConfiguration()调用。请参见此Java.net论坛线程,它链接到这个Java3D bug,后者又链接到这个Sun bug

问题在于::DescribePixelFormat Win32调用很慢——需要60毫秒才能完成。 ...
使用建议的解决方法(消除有问题的win32调用)显著提高了时间(大约为0毫秒)。

提到的解决方法是向JVM传递-Dsun.awt.nopixfmt=true,这使得底层本机代码不调用DescribePixelFormat
这显然不是完美的解决方案:

...使用Java与OpenGL的一些应用程序可能无法正常工作。

但由于我已经在使用Direct3D,所以这不是问题。 这缩短了启动时间3.2秒。

我昨天刚发现了这个解决方法,所以我正在公开记录它,以便再也不会丢失。 - Michael Myers
如何将 -Dsun.awt.nopixfmt=true 传递给 JVM?或者如何停止在 Java3D 中调用 Graphics Configuration 对象? - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接