Senden zwei Texturen zu GLSL shader

Beim senden von zwei Texturen, um meine GLSL shader eigentlich nur einmal kommt. Was merkwürdig ist ist die erste textur die ich bind wird für beide Texturen slots in meinem shader. Dies führt mich zu glauben, dass die Art und Weise leite ich meine Texturen in OpenGL ist falsch. Allerdings bin ich nicht in der Lage auf die Spur des Problems.

Hier ist der code, wo muss ich konfigurieren, damit die Texturen für die Verwendung in meinem shader.

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo2);
glPushAttrib(GL_VIEWPORT_BIT | GL_ENABLE_BIT);
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


//Get uniforms
GLuint pass_3O  = glGetUniformLocation(blend_shader, "org");
GLuint pass_3B = glGetUniformLocation(blend_shader, "blur");

//Activate shaders
glUseProgram(blend_shader);


//Bind first texture 
glActiveTexture(GL_TEXTURE0 );
glBindTexture(GL_TEXTURE_2D, init_texture);

//Bind the second texture 
glActiveTexture(GL_TEXTURE1 );
glBindTexture(GL_TEXTURE_2D, third_texture);

//Assign index to 2d images
glUniform1i(pass_3O, 0);
glUniform1f(pass_3B, 1);

Dem code oben ist die übergabe in zwei Texturen. Das erste ist ein 2D-Bild der ersten rendering-pass der 3D-Szene. Die Dritte ist, die gleiche textur mit x2 Ebenen der Unschärfe Hinzugefügt. Diese Letzte Stufe ist es, zusammen mischen, um ein armeleute-Blüte.

Hier ist der code wo ich bin, Zeichnung beide Texturen auf dem quad.

//Draw to quad
glBegin(GL_QUADS);
    glMultiTexCoord2f(GL_TEXTURE0, 0.0f, 0.0f);
    glMultiTexCoord2f(GL_TEXTURE1, 0.0f, 0.0f);
    glVertex3f(-w_width/2.0,  -w_height/2.0, 0.5f);

    glMultiTexCoord2f(GL_TEXTURE0, 0.0f, 1.0f);
    glMultiTexCoord2f(GL_TEXTURE1, 0.0f, 1.0f);
    glVertex3f(-w_width/2.0,   w_height/2.0, 0.5f);

    glMultiTexCoord2f(GL_TEXTURE0, 1.0f, 1.0f);
    glMultiTexCoord2f(GL_TEXTURE1, 1.0f, 1.0f);
    glVertex3f(w_width/2.0,    w_height/2.0, 0.5f);

    glMultiTexCoord2f(GL_TEXTURE0, 1.0f, 0.0f);
    glMultiTexCoord2f(GL_TEXTURE1, 1.0f, 0.0f);
    glVertex3f(w_width/2.0,   -w_height/2.0, 0.5f);
glEnd();
glFlush();
glPopAttrib();

//Unbind textures
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, 0);

//Disable blend shader
glUseProgram(0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);

Und hier ist der shader ich benutze zum Rendern des endgültigen Bildes.

Vert

#version 120
void main()
{
    gl_TexCoord[0] = gl_MultiTexCoord0;
    gl_TexCoord[1] = gl_MultiTexCoord1;
    gl_Position = ftransform();
}

Frag

#version 120
uniform sampler2D org;
uniform sampler2D blur;
void main()
{
    vec4 orig_clr = texture2D( org,  gl_TexCoord[0].st);
    vec4 blur_clr = texture2D( blur, gl_TexCoord[1].st );
    //gl_FragColor = orig_clr;
    gl_FragColor = blur_clr;
}

Wenn ich wechseln zwischen den letzten zwei Zeilen in dem fragment shader bekomme ich die gleiche genaue Ergebnisse. Der einzige Weg, um zu ändern, die textur wird gerendert ist, um die Reihenfolge zu ändern, in dem ich Sie zu binden.

Zum Beispiel das folgende würde schließlich passieren mir das unscharfe Bild. Noch einmal, nur immer eines der beiden Bilder.

glActiveTexture(GL_TEXTURE0 );
glBindTexture(GL_TEXTURE_2D, third_texture);


glActiveTexture(GL_TEXTURE1 );
glBindTexture(GL_TEXTURE_2D, init_texture);

Irgendwelche Gedanken darüber, was ich mit Blick?

InformationsquelleAutor Freddy | 2013-05-11
Schreibe einen Kommentar