【发布时间】:2016-11-30 14:32:43
【问题描述】:
我需要 3GS 上的模板缓冲区来渲染平面阴影和多边形 offset 无法完美运行,仍然存在 z-fighting 问题。所以我用 模板缓冲区使阴影正确,它适用于win32 Gles2 模拟器,但不是在 iPhone 上。在我给整体添加了后期效果之后 场景。即使在 win32 gles2 模拟器上,模板缓冲区也无法工作。
我尝试将模板缓冲区附加到 FBO,但屏幕变为 黑色的。这是我的代码,
glGenRenderbuffers(1, &dbo); // 深度缓冲区 glBindRenderbuffer(GL_RENDERBUFFER, dbo); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24_OES, 宽度GL,高度GL); glGenRenderbuffers(1, &sbo); // 模板缓冲区 glBindRenderbuffer(GL_RENDERBUFFER, sbo); glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, widthGL, 高度GL); glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,特克斯,0); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, dbo); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, sbo); // 这会使整个屏幕变黑。eglContext 使用 STENCIL_SIZE=8 创建,无需 RTT。
我尝试更改深度缓冲区的 RenderbufferStorage 和 模板缓冲区,但它们都不起作用。
有什么我错过的吗?模板缓冲是否与 深度缓冲区? (我找不到像 GL_DEPTH24_STENCIL8 这样的东西……)
【问题讨论】:
-
您可以检查 glCheckFramebufferStatus() 的返回值以获取更多信息
-
已完成,未报告错误。
-
我发现 GL_OES_packed_depth_stencil 在 OpenGLES.framework 中定义。但我在 Win32 上的 PVR OpenGLES2 模拟器中没有找到它 :( 我明天会尝试让它在设备上运行。
-
当我生成渲染缓冲区并将其存储设置为 GL_DEPTH24_STENCIL8_OES 时,glCheckFramebufferStatus 报告了 GL_FRAMEBUFFER_UNSUPPORT。我很困惑。 iPhone 上的 GLES2 应该支持模板缓冲区。
-
解决了... Stencil 缓冲区仅适用于 iPhone 设备,无法在 Win32 和 Mac 上的模拟器上运行。 Errrr..