Как реализовать glPushAttrib(GL_CURRENT_BIT) в OpenGL ES 1.x

Я пытаюсь изменить свой проект OpenGL на OpenGL ES 1.x. Но есть вызов функции, который я не могу найти, чтобы заменить его.

glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT | GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT );

Я не могу найти маску GL_CURRENT_BIT и функцию glPushAttrib в OpenGL ES 1.x.

Просто, я просто убираю маску GL_CURRENT_BIT из параметров glPushAttrib, и приложение показывает неправильный фон на окне (я тестировал его в среде OpenGL. и фон - это текстурка.). Есть ли какое-либо решение для меня, чтобы заменить glPushAttrib(GL_CURRENT_BIT) и позволить мне правильно запустить приложение в OpenGL, или есть ли какое-либо решение для меня, чтобы реализовать glPushAttrib(GL_CURRENT_BIT), который я могу правильно запускать как в OpenGL, так и в OpenGL ES? Спасибо!


person Tony Teng    schedule 16.02.2017    source источник


Ответы (1)


glPushAttrib не существует в OpenGL ES. Функция, которая должна принимать GL_CLIENT_PIXEL_STORE_BIT в качестве входных данных, на самом деле glPushClientAttrib, которого тоже не существует (а значит, и константы тоже).

Их функциональность заключается в том, чтобы хранить все состояния, которые можно установить с помощью glPixelStorei. Это можно реализовать вручную, записывая эти состояния по мере их установки и выполняя эквивалентные вызовы glPixelStorei для их восстановления. См. здесь (пункт 8) для обсуждения (что о OpenGL относится к OpenGL ES, в котором нет glPush/PopClientAttrib).

person MuertoExcobito    schedule 16.02.2017
comment
спасибо за ваш ответ. Извините, я пишу неправильную константу. Что я действительно хочу спросить, так это GL_CURRENT_BIT. Есть ли какое-нибудь решение для замены glPushAttrib(GL_CURRENT_BIT)? - person Tony Teng; 16.02.2017
comment
То же решение применимо к вашему измененному вопросу, за исключением разных состояний. Если вы перейдете по ссылке для glPushAttrib, там есть таблица, показывающая, какие состояния он сохраняет. В GLES вам просто нужно записать эти настройки (в свой код) и установить их снова, чтобы получить ту же функциональность. - person MuertoExcobito; 16.02.2017
comment
Спасибо, я решил эту проблему. Я нашел проект с открытым исходным кодом под названием «клеи». Он реализует функцию glPushAttrib. еще раз спасибо. - person Tony Teng; 17.02.2017