Как `glTexEnv`,` glColor4x` и `glBlendFunc` связаны в OpenGL ES 1.0? - PullRequest
3 голосов
/ 26 июля 2011

Я смотрю на SurfaceFlinger, то есть код, который делает композицию в Android, и у меня возникают проблемы с пониманием некоторых вызовов OpenGL ES 1.0, поскольку я только запрограммировал код ES 2.0.

Вот код, который меня интересует:

glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glColor4x(0x10000, 0x10000, 0x10000, 0x10000);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

То, что он должен делать, это смешивать текстуру в буфер.

Зачем нужны glTextEnvx и glColor4x звонки?Разве glBlendFunc недостаточно для достижения смешивания?

Я знаю мой вопрос наивен, но я все еще не понимаю, для чего glTexEnvx даже после прочтения документы .

1 Ответ

5 голосов
/ 26 июля 2011

glTexEnv() устанавливает режим текстурного окружения.GL_REPLACE говорит рендереру пропустить текущий цвет (например, с glColor4()) и вместо этого говорит рендереру использовать цвета вашей текстуры для каждого соответствующего пикселя.Если вместо GL_REPLACE вы используете GL_MODULATE, то ваш вызов glColor4() будет включен вместе с цветами текстуры, когда средство визуализации устанавливает цвет пикселя.

Ваш вызов glColor4() не долженделать что-либо (при использовании GL_REPLACE), которое можно увидеть на вашем объекте.

Об аргументах glBlendFunc():

GL_ONE использует текущий цвет, который приходит от вашего входящегопримитив, который мы называем source .GL_ONE_MINUS_SRC_ALPHA умножает пункт назначения (который является текущим сохраненным пикселем в буфере кадра) на (1 - альфа-значение источника).

Обычно, когда вы не используете текстуры,Вы получаете прозрачный эффект от color примитивов, когда glColor4() содержит альфа-значение, где 1 равно полностью непрозрачным, а 0 - полностью прозрачным.

...