Listing 3

void VertexProgram(float4 position : POSITION,
          float3 normal : NORMAL,
           out float4 oPosition : POSITION,
           out float diffuse : TEXCOORD0,
           uniform float3 lightPos,
           uniform float4x4 modelView,
           uniform float4x4 modelViewProj)
{
  oPosition = mul(modelViewProj, position);
  float4 tempPosition = mul(modelView, position);
  float4 normal2 = float4(normal.x, normal.y, normal.z, 0.0);
  normal2 = mul(modelView, normal2);
  
  float3 N = normalize(normal2.xyz);
  float3 L = normalize(lightPos - tempPosition.xyz);
  diffuse = max(dot(N, L), 0);
}
void FragmentProgram(float diffuse : TEXCOORD0, 
             out float4 color : COLOR,
             uniform float4 Kd,
             uniform sampler1D diffuseTex)
{
  diffuse = tex1D(diffuseTex, diffuse).x;
  color = Kd * diffuse;
}