2015-04-26 5 views
0

Чтобы проверить наличие доступности, мне нужно использовать GL.isExtensionAvailable. Чтобы получить объект GL, мне нужно создать GLCanvas и получить экземпляр GL в init() или display().Доступность проверки JOGL перед созданием любого GLCanvas

Есть ли способ проверить наличие расширения еще до того, как я создаю окно, в начале main()?

ответ

2

Я думаю, вам не повезло. Доступность какого-либо расширения может измениться в зависимости от того, какая видеокарта подключена к экрану, на котором вы хотите визуализировать содержимое GL, поэтому вы не можете надежно получить эту информацию до создания контекста GL. Вы можете создать внеэкранный контекст только для получения этой информации, однако результат может отличаться от контекста, связанного с окном.

0

Возможно, вы можете вызвать GLContext.getCurrent(). GetPlatformExtensionsString() очень рано, но он вернет не пустое значение, только если контекст OpenGL был выполнен как минимум один раз и в соответствующем потоке. Не забудьте вызвать GLProfile.initSingleton() перед вызовом GLContext.getCurrent().

Однако комментарий pqnet верен. Множество компьютеров (особенно современных ноутбуков) имеют несколько графических карт и механизмов, которые трудно понять, чтобы переключиться на другой (например, Optimus) в зависимости от потребляемой мощности, профиля производительности («высокая производительность» или нет). Кроме того, могут поддерживаться различные драйверы (дремучий визуализатор GDI и истинный драйвер OpenGL под Windows), часто поддерживаются несколько профилей (совместимые с прямой и обратной совместимостью профили, профили ES даже на настольных компьютерах), ... JOGL будет выполнять свои лучше всего выбрать наиболее способный, но он может использовать разные для вне экрана и на экране. Первый контекст OpenGL, используемый GLProfile и тот, который используется для первого созданного чертежа, может быть очень различным.

Эта проблема не только проблема с JOGL. Мое предложение помогает узнать, какие расширения доступны с устройством по умолчанию. Вы можете использовать GLProfile.glAvailabilityToString() и GLProfile.getDefault() тоже.

N.B: Я предполагаю, что вы используете хотя бы JOGL 2.3.1. Содержание JOGL 1 было остановлено около 5 лет назад.

 Смежные вопросы

  • Нет связанных вопросов^_^