为什么来自PBO的glReadPixel GL_RGB得到错误0x502 INVALD OPTION

时间:2015-12-30 03:54:28

标签: opengl-es-3.0 pbo

我看到了

  

format指定返回像素值的格式;接受的价值观是:

     

GL_ALPHA   GL_RGB   GL_RGBA   从颜色缓冲区读取RGBA颜色分量。每个颜色分量都转换为浮点,使零强度映射到0.0,全强度映射到1.0。

     

然后丢弃不需要的数据。例如,GL_ALPHA丢弃红色,绿色和蓝色组件,而GL_RGB仅丢弃alpha组件。 GL_LUMINANCE将单个组件值计算为红色,绿色和蓝色组件的总和,GL_LUMINANCE_ALPHA执行相同操作,同时将alpha保持为第二个值。最终值被限制在[0,1]范围内。“

https://www.khronos.org/opengles/sdk/1.1/docs/man/glReadPixels.xml

如果使用GL_RGBA,它可以正常工作。但是如果我改变了

  

glReadPixelsPBOJNI(0,0,宽度,高度,GLES30.GL_RGBA,GLES30.GL_UNSIGNED_BYTE,0);

  

glReadPixelsPBOJNI(0,0,width,height,GLES30.GL_RGB,GLES30.GL_UNSIGNED_BYTE,0);

获得0x502。这有什么问题?

我的代码在这里:https://stackoverflow.com/questions/34347835/how-can-i-implement-pbopixel-buffer-object-in-android-grafika-project

1 个答案:

答案 0 :(得分:2)

通常不支持

GL_RGB作为OpenGL ES中glReadPixels()的格式。从ES 3.0规范:

  

在大多数情况下,只接受两种格式和类型的组合。首先根据当前绑定的渲染表面的格式而变化。对于标准化的固定点渲染表面,接受组合格式RGBA和类型UNSIGNED_BYTE。 [..]

     

第二种是表3.2中定义的实现选择格式,不包括格式DEPTH_COMPONENT和DEPTH_STENCIL。可以通过分别使用符号常量IMPLEMENTATION_COLOR_READ_FORMAT和IMPLEMENTATION_COLOR_READ_TYPE调用GetIntegerv来确定此格式的格式和类型的值。

因此,除非您查询实现选择的格式,并将其作为GL_RGB返回,否则您无法使用GL_RGB。您可以在任何地方使用的唯一格式是GL_RGBA

您找到的手册页中的引用看起来像是一个简单的错误。如果查看列出参数的顶部,则不会在格式下将GL_RGB列为有效。因此该页面上的信息显然不一致。手册页中的错误很常见。如有疑问,您必须查看规范文档以获得更具确凿性的信息。