glReadBuffer против glReadBufferNV в OpenGL ES 2.0

Я пытаюсь собрать OpenSceneGraph 3.2 для архитектуры Ubuntu armhf, но получаю ошибку компиляции о том, что символ не найден. Рассматриваемый символ — glReadBuffer. Я посмотрел заголовок GLES2/gl2.h, и действительно, этого символа там нет. Однако этот символ присутствует в GLES3/gl3.h, и в онлайн-документации предполагается, что эта функция была добавлена ​​в OpenGL ES 3.0. Однако я нашел функцию с именем glReadBufferNV в GLES2/gl2ext.h (которая не имеет #include в исходных файлах.

Мне интересно, можно ли использовать glReadBufferNV вместо glReadBuffer и каковы возможные побочные эффекты. Я подозреваю, что NV означает Nvidia и что это реализация только для Nvidia. Это правильно? Если да, то есть ли способ получить glReadBuffer в OpenGL ES 2.0 (у меня сложилось впечатление, что OpenSceneGraph можно построить под OpenGL ES 2.0)?

Редактировать: как оказалось, код, который создает эту часть OpenSceneGraph, был исключен при сборке с помощью OpenGL ES или OpenGL 3.0. Тем не менее, мне все еще интересно, что особенного в glReadBufferNV.


person saiarcot895    schedule 01.08.2014    source источник


Ответы (1)


Как показывают ваши исследования, glReadBuffer был добавлен в ES для версии 3.0; это не определено в 2.0. До этого, согласно найденному вами заголовочному файлу, расширение определяло glReadBufferNV, в частности расширение NV_read_buffer.

Итак, что произошло, так это то, что чего-то не было в спецификации, по крайней мере, Nvidia подумала, что это будет полезно, поэтому они внедрили расширение OpenGL, которое впоследствии обсуждалось на Khronos, были устранены все крайние случаи или двусмысленности и в конечном итоге попал в основную спецификацию.

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

Сравнивая официальную спецификацию glReadBuffer с документацией расширения, расширение имеет несколько связей с другими расширениями, которые вы не ожидаете включить в основную спецификацию (например, COLOR_ATTACHMENTi_NV поддерживается в качестве источника), но см. решенную проблему 7:

Версия 6 этой спецификации несовместима с OpenGL ES 3.0. Для контекстов без заднего буфера это расширение делает FRONT буфером чтения по умолчанию. ES 3.0 вместо этого называет его НАЗАД. Как это можно согласовать?

РЕШЕНО: Обновите спецификацию, чтобы она соответствовала поведению ES 3.0. Это приводит к обратной несовместимости, но ожидается, что это повлияет на несколько приложений. В экосистеме EGL, где преобладает ES 2.0, только растровые изображения не имеют резервного буфера, и их использование остается ограниченным.

Таким образом, расширение было изменено задним числом, чтобы привести его в соответствие с тем, что было согласовано для базовой спецификации.

person Tommy    schedule 04.08.2014