1#include <metal_stdlib> 2#include <simd/simd.h> 3 4using namespace metal; 5 6struct Light 7{ 8 packed_float3 Position; 9 float Radius; 10 float4 Color; 11}; 12 13struct UBO 14{ 15 float4x4 uMVP; 16 Light lights[4]; 17}; 18 19struct main0_out 20{ 21 float4 vColor [[user(locn0)]]; 22 float4 gl_Position [[position]]; 23}; 24 25struct main0_in 26{ 27 float4 aVertex [[attribute(0)]]; 28 float3 aNormal [[attribute(1)]]; 29}; 30 31vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _21 [[buffer(0)]]) 32{ 33 main0_out out = {}; 34 out.gl_Position = _21.uMVP * in.aVertex; 35 out.vColor = float4(0.0); 36 for (int _96 = 0; _96 < 4; ) 37 { 38 float3 _68 = in.aVertex.xyz - float3(_21.lights[_96].Position); 39 out.vColor += ((_21.lights[_96].Color * fast::clamp(1.0 - (length(_68) / _21.lights[_96].Radius), 0.0, 1.0)) * dot(in.aNormal, normalize(_68))); 40 _96++; 41 continue; 42 } 43 return out; 44} 45 46