2016-08-02 31 views
1

Dies ist der Teil des größeren Projekts im Grunde, ich bin Erstellen von Framebuffer mit Farbe, Tiefe und Schablonenpuffer auf folgende Weise:OpenGL Framebuffer - zu Textur-Rendering erzeugt Textur mit Haupt framebufer Inhalt

// Create texture 
glGenTextures(1, &m_textureInput); 
glBindTexture(GL_TEXTURE_2D, m_textureInput); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, getWidth(), getHeight(), 0, GL_BGRA, GL_UNSIGNED_BYTE, 0); 
// Create FBOs 
glGenFramebuffers(1, &m_fboInput); 

glBindFramebuffer(GL_FRAMEBUFFER, m_fboInput); 

// Attach texture to it 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_textureInput, 0); 

// Render buffer, depth with stencil 
glGenRenderbuffers(1, &m_rbDepthStencilInput); 
glBindRenderbuffer(GL_RENDERBUFFER, m_rbDepthStencilInput); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, getWidth(), getHeight()); 
//Attach depth buffer to FBO 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_rbDepthStencilInput); 
//Also attach as a stencil 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_rbDepthStencilInput); 

status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
if(status != GL_FRAMEBUFFER_COMPLETE) 
{ 
    // Restore current framebuffer 
    glBindFramebuffer(GL_FRAMEBUFFER, 0); 
    return false; 
} 

glBindFramebuffer(GL_FRAMEBUFFER, 0); 

Ich binde

glBindFramebuffer(GL_FRAMEBUFFER, m_fboInput); 
// render 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

Wenn ich Textur mit angebautem Dump:: es mit ihm zu machen

glBindTexture(GL_TEXTURE_2D, m_textureInput); 
long imageSize = x * y * 4; 
unsigned char *data = new unsigned char[imageSize]; 
glReadPixels(0,0,x,y, GL_BGRA,GL_UNSIGNED_BYTE,data); 

Ich erhalte Inhalt des Main Framebuffers (0).

Irgendeine Idee, was ich dong falsch bin? Vielen Dank im Voraus.

Antwort

4

glReadPixels docs sagen, es liest Daten aus dem Framebuffer. Da du vorher eine Null an die Grenze gebunden hast, würde ich annehmen, dass es sich um den Standard-Framebuffer handelt.

können Sie entweder binden Ihr Framebuffer-Objekt, rufen Sie dann glReadBuffer mit GL_COLOR_ATTACHMENT0 und dann tun glReadPixels oder, vielleicht mehr direkt, verwendet glGetTexImage direkt von Ihrer Textur zu lesen.

+0

Das war total mein Fehler. ja du hast Recht. Ich dachte, dass glReadPixels von gebundener Textur anstelle von fbo lesen wird. Akzeptieren Sie dies als Antwort. –