フレームバッファを使用して、ビデオ レンダラーで後処理シェーダーを実行しています。シェーダーの 1 つはルックアップが非常に多いため、輝度のみのフレーム バッファーに変更して速度を上げたいと考えています。初期化でglTexImage2D呼び出しをRGBAからLUMINANCEに変更しようとしましたが、「onDrawFrame」でバッファをアタッチしようとするとエラーが発生します。
問題は、例からコードをまとめてハッキングしたため、それが行っているすべてのことを完全に理解していないことです。1 つには、深度アタッチメントも作成しています。ビデオをレンダリングしているため、深度情報は必要ありませんが、それを無効にできるかどうかはわかりません。とにかく、onSurfaceCreated での FBO の初期化は次のとおりです。
GLES20.glGenTextures(1, renTex, 0);
// generate
GLES20.glGenFramebuffers(1, fb2, 0);
GLES20.glActiveTexture(GLES20.GL_TEXTURE4);
// generate color texture
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renTex[0]);
// parameters
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
// create it
// create an empty intbuffer first?
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, texW, texH, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, texBuffer);
//**THIS WORKS AS IS, CHANGING FROM RGBA TO LUMINANCE BREAKS IT**
// create render buffer and bind 16-bit depth buffer
GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, depthRb[0]);
GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16, texW, texH);
onDrawFrame でバッファをアタッチするコードは次のとおりです。
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[0]);
// specify texture as color attachment
GLES20.glViewport(0, 0, w, h);
Matrix.frustumM(mProjMatrix, 0, -.30f, .30f, -.30f, .30f, 3, 7);
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, renTex[0], 0);
// attach render buffer as depth buffer
GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, depthRb[0]);
int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER);
if (status != GLES20.GL_FRAMEBUFFER_COMPLETE)
System.out.println("Frame buffer not obtained :(");
//This works for RGBA but returns an error for LUMINANCE
誰にも何か提案がありますか?また、深度バッファコンポーネントを捨てることはできますか、それとも必須ですか