首页 > 解决方案 > 获取多个片段的 Vulkan/OpenGL 子通道

问题描述

因此,Vulkan 引入了 subpasses,opengl 实现了与 ARM_framebuffer_fetch 类似的行为

过去,我成功地使用 framebuffer_fetch 进行色调映射后期效果着色器。

当时的限制是只能在当前渲染片段的位置读取帧缓冲区的内容。

现在,我想知道的是,Vulkan(甚至 OpenGL ES)现在是否有任何方法可以从多个位置读取(例如实现模糊内核),而无需平铺硬件来存储/加载到 RAM。

理论上我想这应该是可能的,第一遍 wpuld 只需要渲染比模糊子通道略大,基于内核大小(例如,如果内核大小是 4 像素,那么解析的图块需要比模糊子通道小 4 像素块内缓冲区大小)和一些像素必须冗余渲染(在块的重叠上)。

现在,有没有办法做到这一点?我似乎记得看过一些与 subpasses 相关的 Vulkan 指令,这些指令可以定义支撑尺寸(这听起来像我现在正在寻找的东西),但我不记得我在哪里看到的。所以我的问题:

  1. 使用移动平铺渲染器架构上的 Vulkan,是否可以前向渲染某些几何图形并在其上渲染全屏模糊,所有这些都在单个平铺通道中(无需硬件存储中间通道的结果先 ram,然后在模糊时从 ram 加载纹理)?如果是这样,怎么做?

  2. 如果 1 的答案是肯定的,是否也可以在 OpenGL ES 中完成?

标签: opengl-esvulkanframebuffer

解决方案


简短的回答,不。Vulkan 子通道仍然具有 1:1 片段到像素关联的要求。


推荐阅读