Рендеринг в текстуру в моем мобильном приложении работает нормально, когда текстура рендеринга цели не имеет вложенной глубины. Когда я добавляю вложение глубины, оно перестает работать на iOS. Видимо, не удается переключиться обратно на исходную цель рендеринга или прикрепленный к ней буфер глубины, и изображение останавливается, звук продолжается. На Android работает нормально.
// Настройка:
glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING_APPLE, &backbuffer);
glGetIntegerv(GL_FRAMEBUFFER_BINDING,&backbuffer); // tried both
glGenFramebuffers(1, &fbo);
glGenTextures(1, &texture);
glGenRenderbuffers(1, &depthbuffer);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D( GL_TEXTURE_2D,0,GL_RGBA,resx,resy,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER_APPLE, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
glBindRenderbuffer(GL_RENDERBUFFER, depthbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, resx, resy);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER_APPLE, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthbuffer);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
// рендеринг в него
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glViewport(0, 0, resx, resy);
...
// продолжение рендеринга на главный экран:
glBindFramebuffer(GL_FRAMEBUFFER, backbuffer);
glViewPort(0,0,screenX,screenY);
// очевидно не возвращается обратно в буфер, если есть привязка глубины