2

OpenGL ES 3.0 はこちら。次のように TRANSFORM_FEEDBACK バッファの内容を読み戻そうとしています:

GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfo );
GLES30.glBeginTransformFeedback( GLES30.GL_POINTS);
GLES30.glEnable(GL_RASTERIZER_DISCARD);
GLES30.glDrawArrays( GLES30.GL_POINTS, 0, mNumVertices );
GLES30.glDisable(GL_RASTERIZER_DISCARD);
GLES30.glEndTransformFeedback();

int error1 = GLES30.glGetError();
Log.e("mesh", "begin, error="+error1);

ByteBuffer buffer = (ByteBuffer)GLES30.glMapBufferRange( GLES30.GL_TRANSFORM_FEEDBACK, 0, 4*mNumVertices, GLES30.GL_MAP_READ_BIT);

if( buffer!=null )
  {
  // use it
  }
else
  {
  int error2 = GLES30.glGetError();
  Log.e("mesh", "failed to map tf buffer, error="+error2);
  }

GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0);

そして出力は

E: begin, error=0
E: failed to map tf buffer, error=1280

つまり、実際には glMapBufferRange() がエラー 1280 を生成しているように見えますが、これは Google によると GL_INVALID_ENUM です。

問題:

https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glMapBufferRange.xhtmlによると、 glMapBufferRange がそのようなエラーを生成することは決してありません。GL_INVALID_VALUE、GL_INVALID_OPERATION、GL_OUT_OF_MEMORY のみ?

4

1 に答える 1