2011-08-01 6 views
0

では正常に動作していない、と私は解決策を見つけることができませんでした。私はレンダリング機能でこのようにそれを使用FBOsは、私はしばらくの間、この問題を抱えていたOSX

//Initialize buffers 
    glGenBuffers(1, &primaryBuffer); 
    glBindBuffer(GL_FRAMEBUFFER, primaryBuffer); 

    glGenRenderbuffers(1, &depthBuffer); 
    glBindBuffer(GL_RENDERBUFFER, depthBuffer); 
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, Statics::ScreenWidth, Statics::ScreenHeight); 
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer); 

    glGenTextures(1, &colorTexture); 
    glBindTexture(GL_TEXTURE_2D, colorTexture); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, Statics::ScreenWidth, Statics::ScreenHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); 

    glGenTextures(1, &depthTexture); 
    glBindTexture(GL_TEXTURE_2D, depthTexture); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, Statics::ScreenWidth, Statics::ScreenHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL); 

    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer); 
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorTexture, 0); 

    int res = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
    if (res == GL_FRAMEBUFFER_COMPLETE) 
    { 
     printf("GOOD!\n"); 
    } 

    glBindFramebuffer(GL_FRAMEBUFFER, 0); 

:ここ

私はフレームバッファの初期化ここで起こることになって何

glBindFramebuffer(GL_FRAMEBUFFER, primaryBuffer); 
glViewport(0, 0, Statics::ScreenWidth, Statics::ScreenHeight); 
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 

SetCamera(); 
DrawScene1(); 

glBindFramebuffer(GL_FRAMEBUFFER, 0); 

glViewport(0, 0, Statics::ScreenWidth, Statics::ScreenHeight); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
SetCamera(); 
DrawScene2(); 

は「SCENE1」が付属フレームバッファにレンダリングされていることですテクスチャ"scene2"が画面に表示されます。 「SCENE2」は、スクリーンに表示されていますが、私は、レンダリングされたフレームバッファテクスチャを使用する場合、これが表示されるものです: Looks like some GPU memory garbage! :)

誰が間違って何を教えてもらえますか?私はDrawScene1は()DrawScene2()が生産しているものの一部にレンダリングする必要がありながらDrawScene2()は、シーン全体をレンダリングする必要があることを理解している、あなたが書いたから

+0

'depthTexture'のポイントは何ですか? –

+0

あなたは問題がどんなものか正確には言わなかった。結果はどのように見えるのでしょうか?問題はテクスチャの四角形ですか?ああ、FBOで 'GL_GENERATE_MIPMAP'を使わないでください。 FBO拡張がglGenerateMipmaps関数を導入した理由があります。 –

+0

出力はドア内部のドアであるはずです。私はglGenerateMipmapsを試してみましょう – user686776

答えて

2

あなたは)(DrawScene2の任意の詳細(または全体コード)を離れて与えていないので、私はここでしか推測を行うことができます。問題がDrawScene2(だろう)。それを取得する前に、あなたがここにソースがレンダリングなど)DrawScene1(の結果を使用しているので、あなたはおそらくだけではなく、通常のテクスチャとしてそれを治療するための、レンダーターゲットに全体FBOを平手打ち、すなわち適切な世界とテクスチャを設定すると、その座標DrawScene1()が生成したものを「ペイント」したいDrawScene2()によってレンダリングされたドアの境界線)をレンダリングします。あなたはレンダバッファの代わりに、あなたのデプスバッファのためのテクスチャを使用している場合

関連する問題