OpenGL ES 3.0 here. I am trying to read back the contents of a TRANSFORM_FEEDBACK buffer like this:
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);
and the output is
E: begin, error=0
E: failed to map tf buffer, error=1280
i.e. it really looks like glMapBufferRange() generates error 1280, which Google tells me is GL_INVALID_ENUM.
Problem:
according to https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glMapBufferRange.xhtml, glMapBufferRange is never supposed to generate such error. Only GL_INVALID_VALUE, GL_INVALID_OPERATION and GL_OUT_OF_MEMORY ?
Of course
glMapBufferRange
can cause anGL_INVALID_ENUM
error.See OpenGL ES 3.2 Specification - MapBufferRange
Note, this khronos pages are not the OpenGL (ES) specification. This pages are just for help and wiki purpose.
The enumerator constant
GL_TRANSFORM_FEEDBACK
is the target for the operationglBindTransformFeedback
.A valid target for
glMapBufferRange
isGL_TRANSFORM_FEEDBACK_BUFFER
: