Сведения о вопросе

Oleksandr

07:53, 16th August, 2020

Теги

opengl    

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

Просмотров: 463   Ответов: 3

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



  Сведения об ответе

KOMP

05:47, 29th August, 2020

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

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

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

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


  Сведения об ответе

VCe znayu

16:07, 22nd August, 2020

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

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

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


  Сведения об ответе

qwerty101

05:10, 28th August, 2020

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

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

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

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

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

  • ARB_vertex_buffer_object (вершины)
  • ARB_vertex_shader / ARB_fragment_shader / ARB_shader_objects / GLSL spec (шейдеры)

Более развитый:

  • ARB/EXT_framebuffer_object (закадровый рендеринг)

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться