1

我有一个纹理,可以在上面渲染 16 幅图。纹理大小为 1024x1024,分为 4x4“槽”,每个槽为 256x256 像素。

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

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

4

2 回答 2

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也比重新创建新纹理更快。

于 2012-05-11T18:00:25.340 回答
1

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

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

于 2012-05-11T18:01:39.537 回答