0

我看见

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, 宽度, 高度, 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

4

1 回答 1

2

GL_RGB通常不支持作为glReadPixels()OpenGL ES 中的格式。从 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.

您找到的手册页中的引用看起来像是一个简单的错误。如果您查看列出参数的顶部,它不会在formatGL_RGB下列为有效。所以那个页面上的信息显然是不一致的。手册页中的错误很常见。如有疑问,您必须查看规格文件以获取更确凿的信息。

于 2016-01-02T00:48:52.307 回答