iOS OpenGLES 3.0 рендеринга в текстуру не удается с вложением глубины - PullRequest
0 голосов
/ 13 октября 2019

Рендеринг в текстуру в моем мобильном приложении работает нормально, когда текстура рендеринга цели не имеет вложенной глубины. Когда я добавляю вложение глубины, оно перестает работать на 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);

// очевидно не возвращается обратно в буфер, если есть привязка глубины

...