我有两个透明纹理 . 第一个是Source纹理,第二个是Mask Texture . 我想混合两个纹理 .

情景1

具有颜色的

  • 源纹理和具有颜色和Alpha的Alpha蒙版纹理

  • 结果颜色和alpha应该相乘

场景2

具有颜色和Alpha蒙版纹理alpha的

  • 源纹理为零

  • 结果颜色和alpha应为源纹理颜色和Alpha

场景3

具有Alpha零掩模纹理alpha的

  • 源纹理具有颜色和alpha

  • 结果颜色和alpha应为零

如何在金属片段着色器中实现此目的 .

fragment float4 fragmentShaderone(VertexOut params[[stage_in]],
                                                              texture2d<float, access::sample>srcTexture [[texture(0)]],
                                                              texture2d<float, access::sample> maskTexture [[texture(1)]])
{

    constexpr sampler defaultSampler;

    float  srcColor = float4(texture.sample(defaultSampler, float2(params.textureCoordinates)))  * float4(1,0,0,40.0/255.0);

    float4 maskColor = float4(texture4.sample(defaultSampler, float2(params.textureCoordinates))) ;

    return srcColor * maskColor

}

如果我喜欢这个,那么情景2就会丢失 . 无论如何要在金属片段着色器中解决 . 我需要满足三个场景 .