在金属着色器中混合两个纹理

时间:2018-11-21 05:52:53

标签: ios opengl-es metal fragment-shader metalkit

我有两个透明的纹理。第一个是源纹理,第二个是蒙版纹理。我想混合两种纹理。

场景1

  • 具有颜色和Alpha蒙版的源纹理
  • 结果色和Alpha值应相乘

场景2

  • 具有颜色且“ Alpha蒙版纹理”的Alpha为零的源纹理
  • 结果颜色和Alpha应该是“源纹理颜色”和“ Alpha”

场景3

  • 具有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会丢失。无论如何要解决金属片段着色器。我需要满足三种情况。

0 个答案:

没有答案
相关问题