Javaで画像バッファをレンダリングし(この場合、 NDKはオプションではありません)、を介してシェーダーに渡しますGL_TEXTURE_EXTERNAL_OES
。
glTexImage2D
仕様に記載されているように、動作しません。しかし、この関数glEGLImageTargetTexture2DOES
はクラスを介してのみ利用可能であり、GLES11Ext
使用するのはちょっと間違っているようです。
とにかく、私は試しました、そしてそれは私に与えますGL_INVALID_OPERATION
、それは次の場合に起こるはずです:
GLが提供されたeglImageOESを使用してテクスチャオブジェクトを指定できない場合(たとえば、マルチサンプリングされたeglImageOESを参照している場合)、エラーINVALID_OPERATIONが生成されます。
残念ながら、この説明から頭や尾を作ることはできません。特に、AndroidJavaAPIではeglImageOES
関数にアクセスできないようです。この関数を使用するためのJavaの例も見つかりませんでした。
小さな例を添付しました:
// Bind the texture unit 0
GLES20.glActiveTexture( GLES20.GL_TEXTURE0 );
throwOnError( "glActiveTexture" );
GLES20.glBindTexture( GL_TEXTURE_EXTERNAL_OES, _samplerLocation );
throwOnError( "glBindTexture" );
// _output is ByteBuffer.allocateDirect(pixels * Integer.SIZE / Byte.SIZE).order(ByteOrder.nativeOrder()).asIntBuffer()
_output.rewind();
_output.limit( pixels );
GLES11Ext.glEGLImageTargetTexture2DOES( GL_TEXTURE_EXTERNAL_OES, _output );
throwOnError( "glEGLImageTargetTexture2DOES" ); // <-- throws
GLES20.glDrawArrays( GLES20.GL_TRIANGLE_STRIP, 0, 4 );
throwOnError( "glDrawArrays" );
誰かが以前にそれをしたか、これが可能かどうかを知っていましたか?
編集:
実装を見てみましたがglEGLImageTargetTexture2DOES
、バッファを正しく設定する必要があるようです。それを追加しましたが、それでも同じエラーです。