2015-12-30 45 views
0

我看到为什么从PBO glReadPixel GL_RGB遇到错误0x502 INVALD OPTION

格式指定返回的像素值的格式;可接受的值为:

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

回答

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格式下有效。因此,该页面上的信息显然不一致。手册页中的错误很常见。如有疑问,您必须查看规格文件以获取更多确凿信息。

相关问题