2012-02-10 18 views
2

最初の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のテクスチャの正確なコピーになります。

これはどうしてですか?何か不足していますか?

答えて

2
uniform sampler2D texture; 

Rectangle texturesは、2Dテクスチャとしてtexture type同じではありません。はい、2次元ですが、まだ別のテクスチャタイプを維持しています。したがって、sampler2Dでアクセスすることはできません。

samplerRectに変更してください。また、矩形テクスチャは正規化された座標の代わりにテクセル空間座標を取るため、適切なテクスチャ座標を使用する必要があります。

また、2Dテクスチャを使用することもできます。 NPOTテクスチャは半年以上もの間使われてきました。 2の非累乗ターゲットを持つために矩形テクスチャを使う必要はありません。

+0

GL_TEXTURE_RECTANGLE_ARGをすべてGL_TEXTURE_2Dに変更していましたが、sampler2DRectを使用する方が簡単です。どうもありがとうございました! – Andrea3000

2

テクスチャ矩形にはsampler2Dを使用できません.GL_TEXTURE_RECTANGLE_ARBではなくGL_TEXTURE_2Dを使用する必要があります。

ここにあなたがFBOの素敵なチュートリアルがあります。 http://www.songho.ca/opengl/gl_fbo.html

+0

ありがとうございました。最後に、sampler2Dをsampler2DRectに変更しました。それは私にとっては簡単ですが、とにかくありがとう! – Andrea3000

関連する問題