【发布时间】:2018-06-14 05:22:49
【问题描述】:
我正在尝试将我的 iOS 应用程序从 OpenGL 迁移到 Metal。在我的 OpenGL 代码中,我在很多地方都使用了 glColorMask(如果我只想写入选定的通道,例如只写入纹理的 Alpha 通道)。
在 Metal 中,对于渲染管线(虽然是顶点和片段着色器),MTLColorWriteMask 似乎等同于 glColorMask。我可以在通过 MTLRenderPipelineDescriptor 创建 MTLRenderPipelineState 时进行设置。
但我找不到用于计算管道的类似选项(通过内核函数)。每次写入输出纹理时,我总是需要写入所有通道(红色、绿色、蓝色和 alpha)。如果我想保留 alpha(或任何其他通道)并且只想修改颜色通道怎么办?我可以创建输出纹理的副本并将其用作输入之一并从中读取 alpha 以保留值,但这很昂贵。
【问题讨论】:
-
而不是创建一个重复的纹理并将其作为另一个输入提供,似乎我可以在 acess::read_write 中使用输出纹理更多并从中读取 alpha 并将其写回输出纹理。这似乎有效,但不确定是否总是能保证有效。
标签: ios opengl-es interop metal