Что такое расширения OpenGL, и каковы преимущества / недостатки их использования?

В связи с этим вопросом об использовании расширений OpenGL , какова цель этих функций расширения? Зачем мне их использовать? Кроме того, есть ли какие-либо компромиссы или ошибки, связанные с их использованием?

20.08.2008 02:40:40
3 ОТВЕТА
РЕШЕНИЕ

Стандарт OpenGL позволяет отдельным поставщикам предоставлять дополнительные функциональные возможности с помощью расширений при создании новой технологии. Расширения могут вводить новые функции и новые константы, а также могут ослаблять или снимать ограничения на существующие функции OpenGL.

У каждого поставщика есть буквенное сокращение, которое используется для обозначения их новых функций и констант. Например, аббревиатура NVIDIA (NV) используется при определении их проприетарной функции glCombinerParameterfvNV () и их константы GL_NORMAL_MAP_NV.

Может случиться так, что более одного поставщика согласны реализовать одну и ту же расширенную функциональность. В этом случае используется сокращение EXT. Кроме того, может случиться так, что Совет по обзору архитектуры "благословит" расширение. Затем оно становится известным как стандартное расширение, и используется аббревиатура ARB. Первым расширением ARB было GL_ARB_multitexture, представленное в версии 1.2.1. Следуя официальному пути продвижения расширения, мультитекстурирование больше не является опционально реализованным расширением ARB, а является частью основного API OpenGL начиная с версии 1.3.

Перед использованием расширения программа должна сначала определить его доступность, а затем получить указатели на любые новые функции, определяемые расширением. Механизм для этого зависит от платформы, и существуют библиотеки, такие как GLEW и GLEE, чтобы упростить процесс.

21
20.08.2008 03:43:32

Расширения OpenGL - это новые функции, добавленные в спецификацию OpenGL , они добавляются органом стандартов OpenGL и различными поставщиками видеокарт. Они предоставляются программисту в виде новых вызовов функций или переменных. Каждая новая версия спецификации OpenGL поставляется с новыми функциями и (как правило) включает в себя все предыдущие функции и расширения.

Настоящая проблема с расширениями OpenGL существует только в Windows. Microsoft не поддерживает расширения, выпущенные после OpenGL v1.1 . Поставщики видеокарт преодолевают это, отправляя свои собственные версии этой функции через заголовочные файлы и библиотеки. Однако, использование этого может быть немного болезненным, как показывает вопрос, который вы связали с. Но эта проблема в основном исчезла с популярностью GLEW , которая заботится об упаковке всего этого в простой в использовании пакет.

Если вы используете новейшее расширение OpenGL, имейте в виду, что оно может не поддерживаться на старых графических устройствах. Кроме этого, нет никаких других недостатков в использовании этих расширений. Большинство расширений, которые становятся стандартными, чертовски полезны, и есть очень мало логики, чтобы не использовать их.

7
20.08.2008 10:48:40

Расширения, как правило, позволяют поставщикам видеокарт добавлять новые функции в OpenGL, не дожидаясь следующей версии спецификации OpenGL. Существуют разные типы расширений:

  1. Расширение поставщика - только один поставщик предоставляет определенный тип функциональности.
    • Пример: NV_vertex_program
  2. Мультивендорное расширение - несколько поставщиков собрались вместе и согласовали функциональность.
    • Пример: EXT_vertex_program
  3. Расширение ARB - Совет по рассмотрению архитектуры OpenGL благословил расширение. У вас есть разумное ожидание, что этот тип расширения будет существовать некоторое время.
    • Пример: ARB_vertex_program

Расширения не должны проходить через все эти шаги. Иногда расширение реализуется только одним вендором, прежде чем аппаратные разработки пойдут другим путем и расширение будет прекращено. В других случаях расширение может достичь статуса ARB, прежде чем все решат, что есть лучший способ. ( ARB_vertex_programНапример, этот подход был отложен в пользу высокоуровневого языка шейдинга, ARB_vertex_shaderкогда пришло время внедрять шейдеры в основную спецификацию OpenGL.) Даже расширения ARB не вечны; Я бы сегодня не написал что-нибудь требующее ARB_matrix_palette, например.

С учетом всего вышесказанного очень полезно быть в курсе расширений, в частности последних расширений ARB и EXT. В прошлом было верно, что некоторые из «быстрых путей» через аппаратные средства были доступны только через расширения. Точно так же, если вы хотите знать, на что способны все функциональные возможности аппаратного обеспечения, нет лучшего места для поиска, чем в расширении для конкретного поставщика.

Если вы только начинаете работать с OpenGL, я бы порекомендовал изучить:

  • ARB_vertex_buffer_object (вершины)
  • ARB_vertex_shader/ ARB_fragment_shader/ ARB_shader_objects/ GLSL спецификация (шейдеры)

Более продвинутый:

  • ARB/EXT_framebuffer_object (вне экрана рендеринга)

Это все функциональные возможности, внедренные в ядро, но было бы хорошо увидеть его изолированно, чтобы вы могли лучше понять, где находятся его границы. (Базовая спецификация OpenGL легко смешивает старое с новым, поэтому это может быть очень важно, если вы хотите остаться на быстром пути и избежать устаревшего, а иногда и реализованного в программных путях.)

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

6
23.08.2008 03:00:59