OpenGL:使用仅颜色获取扩展在 Tiled GPU 上获取深度

OpenGL: Fetch depth on Tiled GPU with color-only fetch extension

我想使用 OpenGL ES 从图块本地内存中获取深度。

在视频游戏中制作软粒子效果和仅颜色延迟贴花需要它。 ARM_shader_framebuffer_fetch_depth_stencil 扩展效果很好,可以直接访问深度值。

现在我想获得与 ARM_shader_framebuffer_fetch and EXT_shader_framebuffer_fetch 相同的结果。 在 GDC 讨论中 Bringing Fortnite to Mobile with Vulkan and OpenGL ES 我看到一种可能的解决方案是 将深度值写入 alpha

这种方法对我不起作用,因为精度损失很大,我的 alpha 只有 8 位。 我考虑添加足够精确的第二个附件并用 MRT.

写入

问题是:捷运是一种可行的方式,还是我错过了一些重要的技巧?

支持 ARM_shader_framebuffer_fetch 的实现根本不保证支持 MRT。如果他们确实支持它,那么只能检索附件零的颜色。颜色格式也有一些限制;例如它仅支持非标准颜色格式,因此即使您将深度信息放在附件零中,也可能无法获得足够的深度精度。

使用 EXT_shader_framebuffer_fetch 更通用并添加了完整的 MRT 支持,但并非所有基于图块的 GPU 都支持它。