void RenderTexture::startReadBack(int layer) { if (target_ == GL_TEXTURE_2D_ARRAY) { glBindFramebuffer(GL_READ_FRAMEBUFFER, getReadBufferId()); glViewport(0, 0, width(), height()); glFramebufferTextureLayer(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, getId(), 0, layer); glReadBuffer(GL_COLOR_ATTACHMENT0); } else { glBindFramebuffer(GL_READ_FRAMEBUFFER, renderTexture_gl_frame_buffer_->id()); glViewport(0, 0, width_, height_); glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target_, gl_texture_->id(), 0); } glReadBuffer(GL_COLOR_ATTACHMENT0); glBindBuffer(GL_PIXEL_PACK_BUFFER, renderTexture_gl_pbo_); glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(0, 0, width_, height_, GL_RGBA, GL_UNSIGNED_BYTE, 0); readback_started_ = true; glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); }
void GLMultiviewRenderTexture::startReadBack(int layer) { GLRenderImage* image = static_cast<GLRenderImage*>(getImage()); glBindFramebuffer(GL_READ_FRAMEBUFFER, getReadBufferId()); image->setupReadback(renderTexture_gl_pbo_, layer); GLRenderTexture::startReadBack(); }