我注意到,如果我的颜色缓冲区之前绑定我的深度缓存,应用按预期工作:OpenGL ES 2.0的缓冲设置
glGenRenderbuffers(1, &_depthbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _depthbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, _sw, _sh);
glGenRenderbuffers(1, &_renderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _renderbuffer);
[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];
然而,结合深度缓冲之后引起没什么渲染,甚至我glClearColor设置将被忽略:
glGenRenderbuffers(1, &_renderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _renderbuffer);
[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];
glGenRenderbuffers(1, &_depthbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _depthbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, _sw, _sh);
我已经得到了通过深入研究各个组件,了解一些如何OpenGL ES 2.0的工作流,但这好像它是每个人都只是做他们的教程中的唯一的事情/书籍,但没有解释为什么。有任何想法吗?这是甚至是一个问题,或者可能在我的设置的其余部分有问题吗? (如果是的话,我会包括所有的代码)
编辑
@cli_hlt - 深度缓冲区已经被添加到帧缓冲:
glGenFramebuffers(1, &_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depthbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _renderbuffer);
编辑
深度之前:
深度绑定后:
检查这个问题的答案:http://stackoverflow.com/questions/4361516/request-a-depthbuffer-in-opengl-es-for-iphone - 你似乎缺少查询缓冲区大小和附加它到帧缓冲区。 – 2012-03-28 14:47:53
后来到了;如果它不在那里,不管我在订单顺序上有什么问题,我都不会使用深度缓冲区。 – 2012-03-28 15:00:51
好的。 _sw和_sh是否正确?我在问上面的答案,答案海报完全是第二种方式,当答案被接受时,我认为它正在工作。 – 2012-03-28 15:19:19