OES_depth_texture and glReadPixels



OES_depth_texture,允许将深度信息写入带有附加纹理的帧缓冲区。

但是,规范没有描述glReadPixels与这样一个扩展的用法。据我所知,glReadPixels将无法与这样的帧缓冲区一起工作(我已经尝试过,并得到无效的操作错误)。

我的假设正确吗?有人知道关于这个问题的其他参考文献吗?或者是否有一种替代方法从附加的纹理读取到使用glReadPixels?

参见OES_depth_texture:

这个扩展定义了一个新的纹理格式,在纹理中存储深度值。深度纹理图像广泛用于阴影投射,但也可用于其他效果,如基于图像的渲染,位移映射等。

没有直接的方法。你只能间接地做这件事。如果你想读出深纹理,你需要做以下步骤:

  1. 创建与深度纹理相同大小的framebuffer

  2. 使用着色器读取深层纹理,并将其写入帧缓冲区的颜色附件中。

  3. 使用glReadPixels读取颜色缓冲


可能有一个Nvidia硬件支持NV_read_depth扩展的替代方案:

未扩展的OpenGL-ES 2.0只支持使用ReadPixels从当前绑定的framebuffer的默认颜色缓冲区中读取。但是,能够从深度和模板缓冲区读取数据对于调试是很有用的。此扩展将这些功能重新引入OpenGL-ES 2.0。

遗憾的是,我没有找到相应的OES扩展。


不能直接读取深度缓冲区。参见OpenGL ES 3.2规范- 16.1.2 ReadPixels

[…从表8.2中定义的格式中选择一种实现格式,不包括DEPTH_COMPONENTDEPTH_STENCILSTENCIL_INDEX

最新更新