私の問題は次のとおりです。前回のレンダリングに由来する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);
感謝。
あなたの答えをありがとう。私はそれを発見しましたが、私はその意味についてはわかりませんでした。代わりにGL_R8を使用します。 – Ango742