如何使用OpenGL ES清除alpha 0纹理的一部分?

时间:2012-05-11 17:52:56

标签: opengl-es textures

我有一个纹理,我在其上渲染16幅图纸。纹理尺寸为1024x1024,分为4x4“槽”,每个256x256像素。

在我将新绘图渲染到插槽之前,我想清除它以便删除旧绘图并且插槽完全透明(alpha = 0)。

有没有办法用OpenGL做或者我只需要直接在内存中访问纹理像素并用memset oslt清除它们?

2 个答案:

答案 0 :(得分:1)

我想你只是正常更新当前纹理:

std::vector<unsigned char> emptyPixels(1024*1024*4, 0); // Assuming RGBA / GL_UNSIGNED_BYTE
glBindTexture(GL_TEXTURE_2D, yourTextureId);
glTexSubImage2D(GL_TEXTURE_2D,
                0,
                0,
                0,
                1024,
                1024,
                GL_RGBA,
                GL_UNSIGNED_BYTE,
                emptyPixels.data());  // Or &emptyPixels[0] if you're stuck with C++03

即使您要替换每个像素,glTexSubImage2D也比重新创建新纹理更快。

答案 1 :(得分:1)

您的纹理是否主动绑定为帧缓冲区目标? (我假设是的,因为你说你正在渲染它。)

如果是这样,您可以设置glScissor测试,然后设置glClear以清除帧缓冲区的特定区域。