vec3 lightPos = {x: 0, y: 2, z: 0}; vec4 vertexShader( in attr!(vec3, `positions`) inPos, in attr!(vec3, `normals`) inNorm, out vec3 toLight, out vec3 norm) { static if (compute) { norm = modelMat.rotate(inNorm); toLight = lightPos - modelMat.xform(inPos); return comboMat.xform(vec4(inPos.x, inPos.y, inPos.z, 1)); } else return vec4.zero; } /+ option!(`z-test`, false); option!(`blend`, true); +/ void pixelShader( in vec3 toLight, in vec3 inNorm, out Color output) { static if (compute) { float lightSqDist = toLight.sqLen; if (lightSqDist != 0) toLight *= .5f * invSqrt(lightSqDist); float diffuse = toLight.dot(inNorm) * 200f / (1.f + lightSqDist); if (diffuse <= 0) { output.r = output.g = output.b = 0; return; } output = float3ToColor((toLight.x + .5f) * diffuse, (toLight.y + .5f) * diffuse, (toLight.z + .5f) * diffuse); }}