我有一个纹理,我在其上渲染16幅图纸。纹理尺寸为1024x1024,分为4x4“槽”,每个256x256像素。
在我将新绘图渲染到插槽之前,我想清除它以便删除旧绘图并且插槽完全透明(alpha = 0)。
有没有办法用OpenGL做或者我只需要直接在内存中访问纹理像素并用memset oslt清除它们?
答案 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
以清除帧缓冲区的特定区域。