struct vert2frag { float4 position : POSITION; float3 wLightDir : TEXCOORD0; float3 wNormal : TEXCOORD1; }; // define inputs from application struct app2vert { float4 position : POSITION; float3 normal : NORMAL; }; vert2frag main(app2vert IN, uniform float4x4 modelViewProj : _GL_MVP, uniform float4x4 objToWorldMatrix, uniform float4x4 objToWorldInvTranspMatrix, uniform float3 wLightDir, uniform float4 wLightPos ) { vert2frag OUT; #ifdef IS_DIRECTIONAL_LIGHT #else float4 wPosition = mul(objToWorldMatrix, IN.position); wLightDir = (wLightPos - wPosition).xyz; #endif float4 hNormal = float4(IN.normal, 0); float3 wNormal = normalize( (mul(objToWorldInvTranspMatrix, hNormal)).xyz ); #ifdef INVERT_NORMAL wNormal = wNormal * -1; #endif OUT.position = mul(modelViewProj, IN.position); OUT.wLightDir = wLightDir; OUT.wNormal = wNormal; return OUT; }