Я создаю приложение для iOS, которое использует OpenGL ES 2.0.Я немного новичок в OpenGL, так что это может быть тривиальной ошибкой.
Я создал простой шейдер для маскировки одной текстуры другой, используя альфа-канал.Текстура маски инициализируется следующим образом:
glGenTextures (1, & name);glBindTexture (GL_TEXTURE_2D, name);
glTexParameterf (GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 1024, 768, 0, GL_RGBA, GL_RU * 0);glBindFramebufferOES (GL_FRAMEBUFFER_OES, буфер);
glFramebufferTexture2DOES (GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D; * 0 * * *) * 1016B0 * 1016B0 * 1016BF * 1016BF * 1016BF * 1016BF * 1016FB * 1016B0B * * *(позже) нарисуйте некоторые вещи к текстуре маски и свяжите текстуру маски с этим фрагментным шейдером, чтобы применить ее к другой текстуре:
uniform sampler2D baseTextureSampler;
uniform sampler2D maskTextureSampler;
varying lowp vec4 colorVarying;
varying mediump vec2 textureCoordsVarying;
varying mediump vec2 positionVarying;
void main() {
lowp vec4 texel = texture2D(baseTextureSampler, textureCoordsVarying);
lowp vec4 maskTexel = texture2D(maskTextureSampler, positionVarying);
gl_FragColor = texel*colorVarying*maskTexel.a;
}
Это отрисовывает именно так, как я хочу,Однако, чтобы уменьшить накладные расходы при привязке буфера текстуры маски (что кажется существенным), я пытаюсь использовать 8-битный альфа-пиксельный формат только для текстуры маски.НО, если я изменю код из настройки RGBA:
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 1024, 768, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
... только в альфа-формате:
glTexImage2D (GL_TEXTURE_2D, 0, GL_ALPHA, 1024, 768, 0, GL_ALPHA, GL_UNSIGNED_BYTE, буфер);
... фрагментный шейдер не может ничего нарисовать.Поскольку я в первую очередь использую альфу из текстуры маски, похоже, она должна продолжать работать.Есть идеи, почему это не так?