2012-05-11 53 views
1

我有一個紋理,我可以渲染16幅圖畫。該紋理的尺寸爲1024x1024,並分爲4x4「插槽」,每個256x256像素。如何使用OpenGL ES清除alpha 0紋理的部分?

在我將一個新圖形渲染到一個插槽之前,我想清除它以便舊圖形被擦除並且插槽完全透明(alpha = 0)。

有沒有辦法用OpenGL做到這一點或需要我直接在內存中訪問紋理像素,並用memset oslt清除它們?

回答

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比再造一個新的紋理更快。

+0

謝謝。當我按下「發佈」後,我也想到了glTexSubImage2D :-)傻我...... – Mayoneez

1

您的紋理是否被主動綁定爲幀緩衝區目標? (我假設是因爲你說你正在渲染它。)

如果是這樣,你可以設置一個glScissor測試,然後glClear只清除幀緩衝區的特定區域。

+0

不知道這是比iPhone 3Gs +上的glTexSubImage2D更快還是更慢?最有可能兩種方法都足夠快,不會顯着... – Mayoneez

+0

glClear是否會導致刷新?我認爲它確實,但我找不到支持我的參考。如果確實如此,可能會損害性能。 – luke

+0

@Mayoneez似乎很容易嘗試兩種方式,併爲自己看:) – Tim