matrix World; matrix View; matrix Projection; float4 vLightDir[2]; float4 vLightColor[2]; float4 vOutputColor; struct VS_INPUT { float4 Pos : POSITION; float4 Normal : NORMAL; }; struct PS_INPUT { float4 Pos : SV_POSITION; float4 Normal : TEXCOORD0; }; PS_INPUT VS(VS_INPUT input) { PS_INPUT output = (PS_INPUT)0; output.Pos = mul(input.Pos, World); output.Pos = mul(output.Pos, View); output.Pos = mul(output.Pos, Projection); output.Normal = mul(input.Normal, World); return output; } float4 PS(PS_INPUT input) : SV_Target { float4 finalColor = 0; for (int i = 0; i < 2; i++) { finalColor += saturate(dot((float3)vLightDir[i], input.Normal) * vLightColor[i]); } finalColor.a = 1; return finalColor; } float4 PSSolid(PS_INPUT input) : SV_Target { return vOutputColor; } technique10 Render { pass P0 { SetVertexShader(CompileShader(vs_4_0, VS())); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0, PS())); } } technique10 RenderLight { pass P0 { SetVertexShader(CompileShader(vs_4_0, VS())); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0, PSSolid())); } }