Я заметил, что если я привяжу свой буфер глубины перед буфером цвета, приложение будет работать так, как задумано:
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);
ИЗМЕНИТЬ
Граница глубины до:
Граница глубины после:
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, _sw, _sh);
и[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];
, где порядок действительно имеет какое-то значение. - person Matisse VerDuyn   schedule 16.04.2012