我有两个透明纹理 . 第一个是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就会丢失 . 无论如何要在金属片段着色器中解决 . 我需要满足三个场景 .