在金属中混合:设置为0的Alpha仍然不透明

时间:2018-09-29 10:39:10

标签: metal

我无法在Metal中设置混合。即使以Apple提供的Hello Triangle示例开头,也要使用以下代码

pipelineStateDescriptor.colorAttachments[0].blendingEnabled = YES;
pipelineStateDescriptor.colorAttachments[0].sourceAlphaBlendFactor = MTLBlendFactorZero;
pipelineStateDescriptor.colorAttachments[0].destinationAlphaBlendFactor = MTLBlendFactorZero;

和片段功能

fragment float4 fragmentShader(RasterizerData in [[stage_in]]) {
    return float4(in.color.rgb, 0);
}

三角形仍然完全不透明。最后,我要实现的是通过使用不同的混合因子在两个形状之间进行混合,但是我想我将从一个简单的示例开始,以了解发生了什么。我想念什么?

1 个答案:

答案 0 :(得分:0)

sourceAlphaBlendFactordestinationAlphaBlendFactor与构建Alpha通道的混合有关。也就是说,它们控制将写入您的目标缓冲区的 alpha ,您实际上不会看到它们。您可能对写入帧缓冲区的RGB更感兴趣。

请尝试设置sourceRGBBlendFactordestinationRGBBlendFactor的值。对于传统的Alpha混合,请将sourceRGBBlendFactor设置为MTLBlendFactorSourceAlpha,并将destinationRGBBlendFactor设置为MTLBlendFactorOneMinusSourceAlpha