【问题标题】:why glReadPixel GL_RGB from PBO got error 0x502 INVALD OPTION为什么来自 PBO 的 glReadPixel GL_RGB 出现错误 0x502 INVALD OPTION
【发布时间】:2016-04-04 00:33:50
【问题描述】:

我看到了

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

【问题讨论】:

    标签: opengl-es-3.0 pbo


    【解决方案1】:

    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。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多