我看到了
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。这有什么问题?
答案 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
列为有效。因此该页面上的信息显然不一致。手册页中的错误很常见。如有疑问,您必须查看规范文档以获得更具确凿性的信息。