2011-12-04 6 views
1

私の問題は、GL_COLOR_ATTACHMENT0ポイントに1つのカラーテクスチャを付けてフレームバッファオブジェクトを設定し、これを画面に描画すると、完全に白いテクスチャが得られます。OpenGL:FBOに貼り付けられたカラーテクスチャをレンダリングすると白いテクスチャになります

私はバックバッファに描画することができるので、描画コードが正しいことを知っています。フレームバッファに問題が発生したときだけです。描画コードはクワッドをテクスチャ化する非常に基本的なシェーダを使用します。

マイコード以下である:

// Create the FBO 
glGenFramebuffers(1, &m_gbufferFBO); 
glBindFramebuffer(GL_FRAMEBUFFER, m_gbufferFBO); 

// Create a colour texture for use in the fbo 
glGenTextures(1, &m_colourBuffer); 
glBindTexture(GL_TEXTURE_2D, m_colourBuffer); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colourBuffer, 0); 

// check if the frame buffer was successfully created 
CheckFrameBufferErrors(); 
CheckGLErrors(); 


// Begin rendering with the frame buffer 
glBindFramebuffer(GL_FRAMEBUFFER, m_gbufferFBO); 
glPushAttrib(GL_VIEWPORT_BIT | GL_COLOR_BUFFER_BIT); 

// Set the viewport to match the width and height of our FBO 
glViewport(0, 0, m_width, m_height); 

glDrawBuffer(GL_COLOR_ATTACHMENT0); 

// Clear buffer to whatever the clear colour is set to 
glClearColor(m_clearColour.GetR(), m_clearColour.GetG(), m_clearColour.GetB(), m_clearColour.GetA()); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 

Game::GetInstance().GetCamera()->ApplyViewTransform(); 


// RENDERING OF OBJECTS 


glPopAttrib(); 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

そしてバッファのカラーテクスチャは固定機能パイプラインを使用して画面に描画されます。

glDisable(GL_DEPTH_TEST); 
glDisable(GL_BLEND); 

glActiveTexture(GL_TEXTURE0); 
glEnable(GL_TEXTURE_2D); 

// Render the colour buffer to screen 
glBindTexture(GL_TEXTURE_2D, m_colourBuffer); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glBegin(GL_QUADS); 

glTexCoord2f(0.f, 0.f); glVertex3f(0.f, 0.f, 0.f); 
glTexCoord2f(1.f, 0.f); glVertex3f(m_width, 0.f, 0.f); 
glTexCoord2f(1.f, 1.f); glVertex3f(m_width, m_height, 0.f); 
glTexCoord2f(0.f, 1.f); glVertex3f(0.f, m_height, 0.f); 

glEnd(); 

ここで間違っている可能性のあるアイデアはありますか?

答えて

7

FBOがバインドされている場合、FBO添付テクスチャはバインドされていてはなりません。テクスチャは同時にデータソースとシンクになることはありません。

テクスチャがバインドされているすべてのテクスチャユニットとターゲットでは、レンダリング先としてFBOをバインドする前に、別のテクスチャをバインドするか、テクスチャをバインドする必要があります。

関連する問題