opengl-es - glMapBufferRange 返回 null 并产生一个 GL_INVALID_ENUM?
问题描述
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,谷歌告诉我是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 吗?
解决方案
当然glMapBufferRange
会导致GL_INVALID_ENUM
错误。
请参阅OpenGL ES 3.2 规范 - MapBufferRange
如果目标不是表 6.1 中列出的目标之一,则会生成 INVALID_ENUM 错误。
注意,这个 khronos 页面不是 OpenGL (ES) 规范。此页面仅用于帮助和 wiki 目的。
枚举常量GL_TRANSFORM_FEEDBACK
是操作的目标glBindTransformFeedback
。
一个有效的目标glMapBufferRange
是GL_TRANSFORM_FEEDBACK_BUFFER
:
ByteBuffer buffer = (ByteBuffer)GLES30.glMapBufferRange(
GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 4*mNumVertices, GLES30.GL_MAP_READ_BIT);
推荐阅读
- python - 获取 PSQLException:错误:在带有 Postgres 的 spark jdbc 中使用查询而不是表名时在“SELECT”处或附近出现语法错误
- python - 你如何让kivy中的按钮接收触摸而不接收触摸它下面的按钮
- java - 如何从字符串中一次获取字符并设置一个 for 循环,运行第二个字符的编号以打印出第一个字符
- excel - IF 具有多个 Vlookup,每个 Vlookup 具有多个输出
- java - Apache poi Java。我正在尝试添加 upper_letter 编号,但结果是所有部分都编号为 A
- amazon-dynamodb - Dynamodb 如何存储主题标签
- reactjs - React Native 酶测试平面列表 onPress
- java - 当在 initalizable 中调用方法时,应用程序启动方法错误中的异常
- duplicates - 制作光束/数据流 Create.of(List
) 节点发出的正是列表中的元素数量 - json - 在 Postman 的数组中选择第二个对象