我想初始化紋理的都是零,使用DRAW幀緩存由this post的建議。不過,我很困惑,當我連接它GL_COLOR_ATTACHMENT0
我DRAW幀緩存纔會被清除:清除DRAW framebuffer只在附加到GL_COLOR_ATTACHMENT0時才起作用?
int levels = 2;
int potW = 2; int potH = 2;
GLuint _potTextureName;
glGenTextures(1, &_potTextureName);
glBindTexture(GL_TEXTURE_2D, _potTextureName);
glTexStorage2D(GL_TEXTURE_2D, levels, GL_RGBA32F, potW, potH);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _potTextureName, 0);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
GLuint clearColor[4] = {0,0,0,0};
glClearBufferuiv(GL_COLOR, 0, clearColor);
修改片段使用GL_COLOR_ATTACHMENT1
,否則保留一切,不會清除幀緩衝:
int levels = 2;
int potW = 2; int potH = 2;
GLuint _potTextureName;
glGenTextures(1, &_potTextureName);
glBindTexture(GL_TEXTURE_2D, _potTextureName);
glTexStorage2D(GL_TEXTURE_2D, levels, GL_RGBA32F, potW, potH);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, _potTextureName, 0);
glDrawBuffer(GL_COLOR_ATTACHMENT1);
GLuint clearColor[4] = {0,0,0,0};
glClearBufferuiv(GL_COLOR, 0, clearColor);
我嘗試使用glDrawBuffers
而不是建議here,我也嘗試使用glClearColor
和glClear
,但它們都表現相同的方式。我在這裏錯過了什麼?
第二段使用一個潛在的不同值glTexStorage2D的')的格式參數('。你使用的是什麼OpenGL版本? –
有一件事我能想象這樣的觸發行爲可能是因爲你仍然有附色0,這是incomatible新的圖像(如在樣本數,或層不匹配)結合一些其他紋理/渲染。您應該檢查幀緩衝區完整性狀態。您還應該檢查GL錯誤。 – derhass
@derhass,謝謝你指出完整性問題。事實證明這是相關的,我只是把我的發現作爲答案。 – HuaTham