如何在 GLES2 中加载 BGRA 图像纹理?

How to load a BGRA image texture in GLES2?

我有 BGRA 格式的原始图像。

我尝试用 GL_BGRA 、GL_BGRA_EXT 、GL_BGRA_IMG 、GL_EXT_texture_format_BGRA8888 更改 glTexImage2D 格式(第 7 个参数),获取黑色图像。

以下是用于加载纹理的源。第 7 个参数已更改为上述值。

GLuint texture_object_id_1;
glGenTextures(1, &texture_object_id_1);
glBindTexture(GL_TEXTURE_2D, texture_object_id_1);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, osd_raw); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

如果我尝试使用 GL_RGBA,纹理颜色会偏蓝。 知道如何正确加载 BGRA 纹理吗?

根据 OpenGL ES 2 规范,internalformat 必须匹配 format

尝试glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA, renderBufferWidth, renderBufferHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, osd_raw);

此外,您可以对着色器中的纹理数据做任何您想做的事情(包括通道交换)。

对于 OpenGL ES 3,您还可以使用 GL_TEXTURE_SWIZZLE_* 纹理参数。