glClear上的“无效帧缓冲操作” - 在OpenGL ES3中使用sRGB

时间:2016-08-15 20:12:11

标签: ios xcode opengl-es

使用openGL-ES3,在Xcode 7.3中的iPhone5s(硬件,不在模拟器中)上运行时,我在执行glClear时收到“无效的帧缓冲操作”。

有问题的纹理是我的GBuffer的“最终”纹理,就像在本教程http://ogldev.atspace.co.uk/www/tutorial37/tutorial37.html中一样。 关键的区别在于我正在请求sRGB纹理,并且由于ES3限制,我使用GL_COLOR_ATTACHMENT3(而不是4)。

glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB8, WindowWidth, WindowHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
// glTexParameteri ...
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_TEXTURE_2D, m_finalTexture, 0);
GLenum Status = glCheckFramebufferStatus(GL_FRAMEBUFFER); // No errors here

现在当我尝试清除它时,我得到一个“无效的帧缓冲操作”

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo);
// Element at index**[i]** needs to match GL_COLOR_ATTACHMENT**i** on GL-ES3!
GLenum drawbuf[4] = { GL_NONE, GL_NONE, GL_NONE, GL_COLOR_ATTACHMENT3 };
glDrawBuffers(sizeof(drawbuf)/sizeof(drawbuf[0]), drawbuf); 

GLCheckError();  // no errors
glClear(GL_COLOR_BUFFER_BIT); 
GLCheckError();  // => glGetError 506 GL_INVALID_FRAMEBUFFER_OPERATION

现在,如果相反我将这样的纹理初始化(所以没有sRGB),OpenGL不会在clear上给出错误:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, WindowWidth, WindowHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);

据我了解,在OpenGL ES3上支持sRGB ...所以为什么glClear会失败? 任何人的想法?

0 个答案:

没有答案