Помощь отладка ошибки GL_VERSION в приложении Java3d - PullRequest
2 голосов
/ 01 декабря 2009

Я работаю над приложением 3d глобус, написанным на Java, используя java3d для рендеринга. У меня есть установщик 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)  

Я сравнил все библиотеки и банки в каталогах разработки, и все файлы абсолютно одинаковы, и ни одна из них отсутствует. Это самая странная вещь. Я обновил свои графические драйверы (хотя они явно достаточны, так как все отлично работает из моментального снимка уровня). Я написал простое приложение 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: Как вы печатаете GL_VERSION для вашего приложения java3d?
Q2: Что, черт возьми, происходит?

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

для проверки GL_VERSION используйте метод queryProperties () на Canvas3D.

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

Но эта ошибка не отображает точную версию OpenGL, используя приведенный выше код, вы, вероятно, увидите, что вы GL_VERSION не 1.1, как в стековой трассировке (у меня была такая же ошибка с установленным OpenGL 1.5).

0 голосов
/ 01 декабря 2009

После ввода двух моих видеокарт я начал думать о том, как я недавно переключился с использования четырех мониторов на три, чтобы я мог использовать четвертый для своего нового ноутбука. Оказывается, наше приложение сохранило некоторые свойства в моей домашней папке, в которой наше приложение запускалось на четвертом, теперь уже не существующем мониторе. Похоже, что java3d не нашел opengl достаточно поддерживаемым в несуществующем пространстве экрана, и выкинул вышеупомянутое исключение. Запуск приложения с действительными координатами экрана решил проблему.

...