gpt4 book ai didi

ios - glClear 上的 "invalid framebuffer operation"- 在 OpenGL ES3 中使用 sRGB

转载 作者:行者123 更新时间:2023-11-29 11:56:13 25 4
gpt4 key购买 nike

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

有问题的纹理是我的 GBuffer 的“最终”纹理,很像本教程中的 http://ogldev.atspace.co.uk/www/tutorial37/tutorial37.html .主要区别在于,由于 ES3 的限制,我请求 sRGB 纹理并且我使用 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 不会给出清晰的错误:

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

据我了解,OpenGL ES3 支持 sRGB ...那么为什么 glClear 会失败?有什么想法吗?

最佳答案

GL_SRGB8 不是 ES 3.0 中的颜色可渲染格式。在规范文档中:

  • 在从第 128 页开始的“必需的纹理格式”部分中,SRGB8 列在“仅纹理颜色格式”下。
  • 在表 3.13 中,从第 130 页开始,SRGB8 在“Color-renderable”列中没有复选标记。

这也匹配 EXT_srgb扩展规范,在“问题”下:

Do we require SRGB8_EXT be supported for RenderbufferStorage?

No. Some hardware would need to pad this out to RGBA and instead of adding that unknown for application developers we will simply not support that format in this extension.

glCheckFramebufferStatus() 在这种情况下应该返回 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT。如果它没有这样做,那看起来像是 OpenGL 实现中的错误。

最接近的颜色可渲染替代方案是 GL_SRGB8_ALPHA8

关于ios - glClear 上的 "invalid framebuffer operation"- 在 OpenGL ES3 中使用 sRGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38962338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com