#include using namespace metal; struct Params { float bias; }; struct _fs_main_Input { float2 uv [[user(locn0)]]; float2 shadow_uv [[user(locn1)]]; }; struct _fs_main_Output { float4 _value [[user(locn0)]]; }; fragment _fs_main_Output fs_main(_fs_main_Input input [[stage_in]], constant Params& params [[buffer(0)]], texture2d diffuse_tex_tex [[texture(0)]], sampler diffuse_tex_samp [[sampler(0)]], depth2d shadow_map_tex [[texture(1)]], sampler shadow_map_samp [[sampler(1)]]) { _fs_main_Output __luma_output; float4 mip_color = diffuse_tex_tex.sample(diffuse_tex_samp, input.uv, level(params.bias)); float shadow = shadow_map_tex.sample_compare(shadow_map_samp, input.shadow_uv, 0.5); __luma_output._value = float4((mip_color.rgb * shadow), mip_color.a); return __luma_output; }