OES_depth_texture,允许将深度信息写入带有附加纹理的帧缓冲区。
但是,规范没有描述glReadPixels与这样一个扩展的用法。据我所知,glReadPixels将无法与这样的帧缓冲区一起工作(我已经尝试过,并得到无效的操作错误)。
我的假设正确吗?有人知道关于这个问题的其他参考文献吗?或者是否有一种替代方法从附加的纹理读取到使用glReadPixels?
参见OES_depth_texture:
这个扩展定义了一个新的纹理格式,在纹理中存储深度值。深度纹理图像广泛用于阴影投射,但也可用于其他效果,如基于图像的渲染,位移映射等。
没有直接的方法。你只能间接地做这件事。如果你想读出深纹理,你需要做以下步骤:
-
创建与深度纹理相同大小的framebuffer
-
使用着色器读取深层纹理,并将其写入帧缓冲区的颜色附件中。
-
使用
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_COMPONENT、DEPTH_STENCIL和STENCIL_INDEX