glMapBufferRange返回null并生成GL_INVALID_ENUM?

问题描述 投票:2回答:1

此处为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吗?

opengl-es buffer transform-feedback
1个回答
1
投票

当然glMapBufferRange会导致glMapBufferRange错误。参见GL_INVALID_ENUM

如果目标不是表6.1中列出的目标之一,则会生成INVALID_ENUM错误。

注意,此khronos页面不是OpenGL(ES)规范。这些页面仅用于帮助和Wiki目的。


枚举器常量OpenGL ES 3.2 Specification - MapBufferRange是操作GL_TRANSFORM_FEEDBACK的目标。

glBindTransformFeedback的有效目标是glBindTransformFeedback

glMapBufferRange
© www.soinside.com 2019 - 2024. All rights reserved.