16枚の描画をレンダリングするテクスチャがあります。テクスチャのサイズは1024x1024で、それぞれ256x256ピクセルの4x4の「スロット」に分割されています。
新しい図面をスロットにレンダリングする前に、古い図面が消去され、スロットが完全に透明になるようにクリアしたいと思います(alpha = 0)。
OpenGLでそれを行う方法はありますか、またはメモリ内のテクスチャピクセルに直接アクセスし、memset osltでそれらをクリアする必要がありますか?
テクスチャはフレームバッファターゲットとしてアクティブにバインドされていますか?(あなたがそれにレンダリングしているとあなたが言うので、私はイエスと仮定しています。)
その場合は、glScissor
テストを設定し、続いglClear
てフレームバッファの特定の領域をクリアすることができます。
現在のテクスチャを通常どおり更新するだけだと思います。
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は新しいテクスチャを再作成するよりも高速です。