-- 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