我需要3GS上的模板缓冲区来渲染平面阴影和多边形 偏移不会完美,仍然有z-fighting问题。所以我用 模板缓冲区使阴影正确,它适用于win32 gles2 模拟器,但不是在iPhone上。之后我向整体添加了一个帖子效果 现场。即使在win32 gles2模拟器上,模板缓冲区也不起作用。
我试图将模板缓冲区附加到FBO,屏幕转向 黑色。这是我的代码,
glGenRenderbuffers(1, &dbo); // depth buffer glBindRenderbuffer(GL_RENDERBUFFER, dbo); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24_OES, widthGL, heightGL); glGenRenderbuffers(1, &sbo); // stencil buffer glBindRenderbuffer(GL_RENDERBUFFER, sbo); glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, widthGL, heightGL); glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, dbo); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, sbo); // this make the whole screen black.
使用STENCIL_SIZE = 8创建eglContext,它在没有RTT的情况下工作。
我尝试更改深度缓冲区和。的RenderbufferStorage 模板缓冲区,但它们都不起作用。
我有什么遗漏的吗?模板缓冲包是否包含 深度缓冲? (我找不到GL_DEPTH24_STENCIL8 ......)
答案 0 :(得分:14)
在iOS上的OpenGL ES 2.0中,您必须使用GL_DEPTH24_STENCIL8_OES创建组合深度和模板渲染缓冲区,然后将其作为GL_DEPTH_ATTACHMENT和GL_STENCIL_ATTACHMENT附加到绑定的帧缓冲区。
glGenRenderbuffers(1, &depthStencilRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthStencilRenderbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthStencilRenderbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depthStencilRenderbuffer);
答案 1 :(得分:3)
请注意,如果您使用的是GLKView,它就像
一样简单 view.drawableStencilFormat = GLKViewDrawableStencilFormat8;
其中视图为:GLKView*