Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
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();
}