最初のFBO(fboA)に付けられたテクスチャを「読み込み」、フラグメントシェーダで変更して第2のFBO(fboB)。GLSL:FBOからテクスチャを読み込み、フラグメントシェーダを使用して別のFBOにレンダリングすることができません
私はそれを把握することができません、私は黒または白のテクスチャを持っているすべてを得る。ここで
は、コードは次のとおりです。
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboB);
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, textureFromFboA);
GLuint t1Location = glGetUniformLocation(shaderProgram, "texture");
glUniform1i(t1Location, 0);
glUseProgram(shaderProgram);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f (0.0f, 0.0f);
glTexCoord2f(imageRect.size.width, 0.0f);
glVertex2f (imageRect.size.width, 0.0f);
glTexCoord2f(imageRect.size.width, imageRect.size.height);
glVertex2f (imageRect.size.width, imageRect.size.height);
glTexCoord2f(0.0f, imageRect.size.height);
glVertex2f (0.0f,imageRect.size.height);
glEnd();
glDisable(GL_TEXTURE_RECTANGLE_ARB);
glFlush();
glUseProgram(0);
これは、フラグメントシェーダコードです:
#version 120
uniform sampler2D texture;
void main(void)
{
gl_FragColor = texture2D(texture, gl_TexCoord[0].st) * 0.8;
}
私はfboBでレンダリング暗い質感を持っていますが、私はすべての黒の質感を得ることを期待します。これは私がgl_FragColor = texture2D(texture, gl_TexCoord[0].st);
と書く場合にも起こります。
逆に、私がgl_FragColor = vec2(1.0, 0.0, 0.0, 1.0);
と書くと、出力としてすべて赤いテクスチャが正しく表示されます。
glUseProgram()
ステートメントをコメントアウトすると、コードは正常に動作し、fboBのテクスチャはfboAのテクスチャの正確なコピーになります。
これはどうしてですか?何か不足していますか?
GL_TEXTURE_RECTANGLE_ARGをすべてGL_TEXTURE_2Dに変更していましたが、sampler2DRectを使用する方が簡単です。どうもありがとうございました! – Andrea3000