#ifdef DESC [program] type: graphics vertex: main fragment: main [binding] name: mesh rate: vertex [attribute] name: position type: vec3 [attribute] name: normal type: vec3 [attribute] name: uv type: vec2 [interpolator] name: uv type: vec2 [interpolator] name: normal type: vec3 [struct] name: MVP [variable] name: model type: mat4 [variable] name: view_projection type: mat4 [cbuffer] name: c_mvp type: MVP stage: vertex [target] name: colour type: vec4 #endif #ifdef VERTEX_SHADER void main() { interpolator.uv = uv; interpolator.normal = mat3(c_mvp.model) * normal; gl_Position = c_mvp.view_projection * c_mvp.model * vec4(position, 1.0); } #endif #ifdef FRAGMENT_SHADER void main() { vec3 normal = normalize(interpolator.normal); float light = max(dot(normal, vec3(0, 0, 1)), 0.0); colour = vec4(light.xxx, 1.0); } #endif