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

StackOverflow https://stackoverflow.com/questions/17352

  •  08-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Реальная проблема с расширениями OpenGL существует только в Windows.Корпорация Майкрософт не поддерживала никаких расширений, которые были выпущены после OpenGL v1.1.Производители видеокарт преодолевают эту проблему, поставляя свою собственную версию этой функциональности через заголовочные файлы и библиотеки.Однако использование этого может быть немного болезненным, как показывает вопрос, на который вы ссылались.Но эта проблема в основном исчезла с ростом популярности РАДОВАТЬСЯ, который заботится о том, чтобы упаковать все это в простую в использовании упаковку.

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

Расширения - это, как правило, способ для поставщиков видеокарт добавить новые функциональные возможности в 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 плавно смешивает старое с новым, так что это может быть очень важно, если вы хотите оставаться на быстром пути и избегать устаревших, а иногда и реализованных программных путей.)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top