【发布时间】:2020-11-28 03:00:33
【问题描述】:
在 Metal 中更改混合功能是否需要设置一个全新的 MTLRenderPipelineState?
我假设是,因为 MTLRenderPipelineState 是不可变的,所以我不能更改它的描述符,例如描述符的 sourceRGBBlendFactor 属性。但我想确认一下,因为这听起来有点低效,无法生成大型对象来更改单个参数。
编辑: 我正在考虑一个案例,我正在绘制一个带有一系列网格的顶点缓冲区并多次调用 -drawPrimitives:。每个网格可以使用不同的混合模式,但都使用相同的顶点和片段着色器。在 OpenGL 中,我可以在绘图调用之间切换 glBlendFunc()。在 Metal 中,我需要设置一个带有多个状态值的完全独立的 MTLRenderPipelineState。
【问题讨论】:
-
这个答案可能会给你更多信息。 stackoverflow.com/a/51414629/409315
-
是的,我之前看到过这个答案,但它一般是关于设置混合模式,而不是经常切换它。到目前为止,我只使用两个几乎相同的 MTLRenderPipelineState 实例来执行相同的着色。它们之间的唯一区别是应用的混合模式。
标签: objective-c metal