2009-12-01 55 views
2

我正在使用java3d編寫的用java編寫的3d globe應用程序進行渲染。我有一個Windows安裝程序,基本上將文件從開發快照複製到程序文件目錄。它運行從devel的快照很好,但後運行安裝時,它這樣做:幫助在Java3d應用程序中調試GL_VERSION錯誤

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) 

我比較了發展目錄和文件的所有圖書館和罐子都是完全一樣的,並沒有一個是失蹤。這是最奇怪的事情。我已經更新了我的圖形驅動程序(儘管它們顯然是足夠的,因爲從開發快照中運行得很好)。我已經寫了一個簡單的java3d應用程序,它可以製作一個Canvas3D並向它添加一個ColorCube。它運行良好。附:我們的開發快照包括所有的dll,jar和從中運行的jre。我們記錄了所有庫和jvm版本,並且它們與從發佈快照和安裝的應用程序生成的日誌完全相同。我們使用顯式路徑來運行java.exe(.. \ jre \ bin \ java.exe),所以PATH變量不在運行中。

我正在尋找想法來調試這個。我想編寫一個簡單的java應用程序來打印所有的GL屬性,特別是GL_VERSION,試圖展示兩個設置之間的一些可量化的差異。 java3d文檔不包括這些,所有的網絡搜索GL_VERSION問題只是告訴你更新你的驅動程序。

哦,我有Nvidia Quadro FX 3800顯卡。他們其中的兩個。

總結...
Q1:如何爲您的java3d應用程序打印GL_VERSION?第二季度:究竟是怎麼回事?

回答

0

輸入關於我的兩個圖形卡後,我開始思考我最近如何從使用四個顯示器切換到三個,所以我可以使用第四個用於我的新筆記本電腦。打開我們的應用程序已保存我的家庭文件夾中的一些屬性,我們的應用程序啓動了第四個,現在不存在的監視器。看起來,java3d沒有在不存在的屏幕空間中找到足夠的opengl支持,並拋出了上述異常。用有效的屏幕座標啓動應用程序解決了問題。

0

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

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

但這個錯誤不會顯示的OpenGL準確的版本,使用上面的代碼,你可能會看到,你是GL_VERSION不是1.1像堆棧跟蹤(我有同樣的錯誤使用OpenGL 1.5安裝)。