gpt4 book ai didi

ios - 相当于内核程序的 Metal 中的 glColorMask?

转载 作者:行者123 更新时间:2023-11-28 19:27:32 24 4
gpt4 key购买 nike

我正在尝试将我的 iOS 应用程序从 OpenGL 迁移到 Metal。在我的 OpenGL 代码中,我在很多地方使用 glColorMask(如果我只想写入选定的 channel ,例如只写入纹理的 alpha channel )。

在 Metal 中,对于渲染管线(通过顶点和片段着色器)来说,MTLColorWriteMask 似乎等同于 glColorMask。我可以在通过 MTLRenderPipelineDescriptor 创建 MTLRenderPipelineState 时设置它。

但我找不到类似的计算管道选项(通过内核函数)。每次写入输出纹理时,我总是需要写入所有 channel (红色、绿色、蓝色和 alpha)。如果我想保留 alpha(或任何其他 channel )并且只想修改颜色 channel 怎么办?我可以创建输出纹理的副本并将其用作输入之一并从中读取 alpha 以保留值,但这很昂贵。

最佳答案

计算机内存架构不喜欢只写入一些字节的数据。写入 4 个字节中的 1 个通常涉及将这四个字节读入缓存,修改缓存中的其中一个,然后将这四个字节写回到内存中。嗯,大多数计算机一次读取/写入超过 4 个字节的很多,但您明白了。

帧缓冲区也会发生这种情况。如果您执行部分写入掩码,硬件仍将在该纹理上执行相当于读取/修改/写入的操作。它只是没有改变它读取的所有字节。

因此您可以从计算着色器中执行相同的操作。读取 4 向量值,修改所需的 channel ,然后将其写回。只要读取和写入来自同一个着色器调用,就不会有同步问题(假设没有其他调用试图读取/写入同一位置,但如果是这种情况,你无论如何都会有问题).

关于ios - 相当于内核程序的 Metal 中的 glColorMask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50850110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com