Я думал, что сформировал общее понимание того, как работают соглашения об именах OpenGL и расширения, пока не наткнулся на случай, который смутил меня.
Вот мое понимание до сих пор:
Нет суффикса - например glGenBuffers()
. Эта функция является частью основного профиля. На вики-странице сказано, что это было добавлено в основной профиль, начиная с версии 1.5.
ARB - например glGenBuffersARB()
. Эта функция является частью стандартизированного GL_ARB_vertex_buffer_object
расширения. Спецификации данного расширения четко заявляет GenBuffersARB()
в разделе «Новые процедуры и функции». Раздел «Зависимости» говорит мне, что я могу получить к нему доступ из контекста 1.4+, если оборудование поддерживает расширение.
EXT - это расширения и функции, специфичные для конкретного поставщика, которые могут поддерживать только некоторые поставщики. Буферный объект Vertex, похоже, не имеет расширения EXT в реестре.
Вот где мое понимание нарушается:
glGenFramebuffers
Как показывает вики , ядро было добавлено в 3.0.
Теперь я хочу получить доступ к возможностям кадрового буфера в более низкой версии профиля ядра, чем 3.0. Поэтому я хочу использовать его как расширение. Реестр спецификаций говорит мне, что есть два доступных расширения - ARB и EXT .
Вопрос 1 - Если расширение ARB существует, почему существует расширение EXT? Разве вы не всегда выбираете стандартизированный вариант по сравнению с конкретным поставщиком?
Взгляд на спецификацию ARB в разделе «Новые процедуры и функции» говорит мне, что расширение определяет GenRenderbuffers()
функцию. На этот раз нет суффикса ARB. У GLEW вообще нет прототипа функции glGenRenderbuffersARB()
. Weird.
Спецификация EXT, однако, имеет GenRenderbuffersEXT()
функцию в разделе новых функций, и GLEW также имеет glGenRenderbuffersEXT()
.
Вопрос 2 - Почему нет суффикса ARB, если есть суффикс EXT? Как это работает для ARB, если имена функций ARB и основной функции совпадают?
Вопрос 3 - Я в конечном счете хочу функции Framebuffer из профиля 1.4. Какое расширение и какой набор функций я должен использовать, чтобы получить максимальное покрытие совместимости оборудования?