帮助调试Java3d应用程序中的GL_VERSION错误

时间:2009-12-01 16:56:11

标签: java opengl java-3d

我正在使用java3d编写用java编写的3d globe应用程序进行渲染。我有一个Windows安装程序,基本上将文件从开发快照复制到程序文件目录。它从devel快照运行良好,但在安装后运行时它执行此操作:

Java 3D ERROR : OpenGL 1.2 or better is required (GL_VERSION=1.1)  
javax.media.j3d.IllegalRenderingStateException: GL_VERSION  
    at javax.media.j3d.NativePipeline.createNewContext(Native Method)  
    at javax.media.j3d.NativePipeline.createNewContext(NativePipeline.java:2736)  
    at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:4895)  
    at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:2421)  
    at javax.media.j3d.Renderer.doWork(Renderer.java:895)  
    at javax.media.j3d.J3dThread.run(J3dThread.java:256)  

我比较了开发目录中的所有库和jar,文件都完全相同,没有丢失。这是最奇怪的事情。我已经更新了我的图形驱动程序(尽管它们显然足够了,因为从开发快照中运行良好)。我写了一个简单的java3d应用程序,它能够制作Canvas3D并为其添加ColorCube。它运行正常。附:我们的开发快照包括所有dll,jar和运行的jre。我们记录了所有库和jvm版本,它们在从devel快照和已安装的应用程序生成的日志中完全相同。我们使用java.exe(.. \ jre \ bin \ java.exe)的显式路径运行,因此PATH变量不在播放中。

我正在寻找调试这个的想法。我想写一个简单的java应用程序打印所有GL属性,特别是GL_VERSION,试图证明两个设置之间的一些可量化的差异。 java3d文档没有涵盖这一点,并且所有关于GL_VERSION问题的互联网搜索都会告诉您更新驱动程序。

哦,我有Nvidia Quadro FX 3800卡。实际上是两个人。

总结......
Q1:如何为java3d应用程序打印GL_VERSION? Q2:到底发生了什么事?

2 个答案:

答案 0 :(得分:0)

在输入我的两张显卡后,我开始考虑我最近如何从使用四台显示器切换到三台显示器,所以我可以将第四台用于我的新笔记本电脑。打开我们的应用程序已经在我的主文件夹中保存了一些属性,这些属性使我们的应用程序在第四个现在不存在的监视器上启动。似乎java3d在不存在的屏幕空间中没有找到足够支持的opengl,并抛出了上述异常。使用有效的屏幕坐标启动应用程序解决了这个问题。

答案 1 :(得分:0)

检查GL_VERSION在Canvas3D上使用queryProperties()方法。

String glVersion = (String)getCanvas3D().queryProperties().get("native.version");

但是这个错误并没有显示OpenGL的准确版本,使用上面的代码你可能会发现你的GL_VERSION不是像堆栈跟踪中的1.1(我在安装OpenGL 1.5时遇到了同样的错误)。