2016-10-17 15 views
0

私の問題は次のとおりです。前回のレンダリングに由来する2つのイメージをレンダリングし、それらを特別なアルゴリズムでブレンドしたいとします。私の最初のイメージ/テクスチャはRGBであり、2番目のイメージはグレースケールであるので、輝度が得られます。OpenGL ES3 FrameBufferオブジェクトエラー

私の目標を達成する最良の方法は、フレームバッファオブジェクトを使用することです。そこで、最初のイメージ用に1つのFBOを作成し、そのFBOにレンダリング出力を受け取る新しいテクスチャを関連付けます。テクスチャのフォーマットはGL_RGBで、うまくいけば、私の最初のFBOにはテクスチャのレンダリングが含まれています。 次に、2番目のイメージと同じように、フォーマットはGL_LUMINANCEです。しかしdraw関数で、このFrameBufferにバインドしてStatusをチェックすると、エラーGL_FRAMEBUFFER_INCOMPLETE_ATTACHMENTが出ます。私がテクスチャをRGBに変更すると、それは機能します。

しかし、ブレンドのために、私の画像の輝度成分ではなく、輝度成分にアクセスする必要があります。

解決策はありますか?

私は、imex6q FreescaleのSOCでOpenGL ES 3.0を使用しています。

は、ここに私のコードです: 1 - フレームバッファオブジェクトとテクスチャ描画機能で次に

glGenFramebuffers(1, &m_uiFrameBufferObject); 
glBindFramebuffer(GL_FRAMEBUFFER, m_uiFrameBufferObject); 

glGenTextures(1, &m_uiTextureId[1]); 
glBindTexture(GL_TEXTURE_2D, m_uiTextureId[1]); 

glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, 1280, 960, 
       0, GL_LUMINANCE, GL_UNSIGNED_BYTE, nullptr); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureId[1], 0); 
glDrawBuffers(1, attachments); //GL_COLOR_ATTACHMENT0 

の作成:お時間を

glBindFramebuffer(GL_FRAMEBUFFER, m_uiFrameBufferObject); 

if(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT) 
{ 
    // I go there 
} 

glViewport(0, 0, 1280, 960); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glUseProgram(m_ProgCamera.GetHandle()); 

glVertexAttribPointer(0, 3, GL_FLOAT, 0, 0, vVertices); 
glEnableVertexAttribArray(0); 

// Bind the color attributes 
glVertexAttribPointer(1, 3, GL_FLOAT, 0, 0, g_vertexColors); 
glEnableVertexAttribArray(1); 

glVertexAttribPointer(2, 2, GL_FLOAT, 0, 0, g_vertexTexCoords); 
glEnableVertexAttribArray(2); 
// Select Our Texture 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, m_textureCamera.GetHandle()); 

glDrawArrays(GL_TRIANGLES, 0, 6); 

// Cleanup 
glDisableVertexAttribArray(0); 
glDisableVertexAttribArray(1); 
glDisableVertexAttribArray(2); 

感謝。

答えて

2

GL_LUMINANCEは、OpenGL ES 3.0のカラーレンダリング可能な形式ではありません。節においてspecification状態4.4.4(フレームバッファ完全性):

内部フォーマットは、色レンダリングそれが色レンダリングとして注目テーブル 3.12から形式のいずれかである場合、またはそれがある場合アンサイズフォーマットRGBAまたはRGB。いいえ 圧縮された内部形式を含む他の形式は、カラーレンダリング可能です。

GL_LUMINANCEはこのリストには含まれていないため、このようなテクスチャにはレンダリングできません。あなたのニーズに応じて、たとえば、代わりにGL_R8を使用することができます。

+0

あなたの答えをありがとう。私はそれを発見しましたが、私はその意味についてはわかりませんでした。代わりにGL_R8を使用します。 – Ango742

関連する問題