使用 Metal(对比 OpenGL),color/alpha 混合如何在单通道渲染目标上工作?
With Metal (vs OpenGL), How does color/alpha blending work on single-channel render targets?
我正在从一篇技术论文中移植一些 OpenGL 代码以用于 Metal。在其中,他们使用只有一个通道的渲染目标 - 一个 16 位浮点缓冲区。但随后他们像这样对其设置了混合操作:
glBlendFunci(1, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
只有一个通道,这是否意味着使用 OpenGL,目标默认为 alpha 通道?
有谁知道Metal是不是一样的?我没有看到我期望的结果,我想知道 Metal 是否有所不同,或者是否有一个设置可以控制在混合方面如何处理单通道目标。
在 OpenGL 中,image format channels are labeled explicitly with their channels. There is only one one-channel color format: GL_R*
(obviously with different bitdepths and other info). That is, red-only. And while texture swizzling 可以使红色通道出现在纹理获取的其他通道中,这不适用于帧缓冲区写入。
此外,该混合函数实际上并未使用 destination alpha。它只使用源 alpha,它具有 FS 给它的值。因此,帧缓冲区不存储 alpha 的事实本质上是无关紧要的。
我正在从一篇技术论文中移植一些 OpenGL 代码以用于 Metal。在其中,他们使用只有一个通道的渲染目标 - 一个 16 位浮点缓冲区。但随后他们像这样对其设置了混合操作:
glBlendFunci(1, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
只有一个通道,这是否意味着使用 OpenGL,目标默认为 alpha 通道?
有谁知道Metal是不是一样的?我没有看到我期望的结果,我想知道 Metal 是否有所不同,或者是否有一个设置可以控制在混合方面如何处理单通道目标。
在 OpenGL 中,image format channels are labeled explicitly with their channels. There is only one one-channel color format: GL_R*
(obviously with different bitdepths and other info). That is, red-only. And while texture swizzling 可以使红色通道出现在纹理获取的其他通道中,这不适用于帧缓冲区写入。
此外,该混合函数实际上并未使用 destination alpha。它只使用源 alpha,它具有 FS 给它的值。因此,帧缓冲区不存储 alpha 的事实本质上是无关紧要的。