-- Basic fragment shader — inline entry with implicit return uniform material_tex: sampler2D @entry(fragment) function shade(uv: vec2, normal: vec3) -> vec4 let albedo = sample(material_tex, uv) let n = normalize(normal) let light_dir = normalize(vec3(1.0, 1.0, 0.5)) let light = max(dot(n, light_dir), 0.0) return vec4(albedo.rgb * light, albedo.a) end