!!ARBfp1.0
#
# Demonstrates basic vertex/fragment shader communication.
#
# Orion Sky Lawlor, olawlor@acm.org, 2005/2/7 (Public Domain)
#

# Vertex/fragment communication protocol
ATTRIB world  =fragment.texcoord[4]; # World-coordinates position
ATTRIB worldN =fragment.texcoord[5]; # World-coordinates normal (interpolated)
ATTRIB albedo =fragment.texcoord[6]; # Material "diffuse color"
ATTRIB viewdir=fragment.texcoord[7]; # Viewing direction (points toward eye)

# Regular diffuse lighting: normal dot light
TEMP diffuse;
DP3_SAT diffuse, worldN, state.light[0].position;

ADD diffuse,diffuse,0.2; # state.light[0].ambient;
MUL diffuse,diffuse,albedo;

# Specular lighting: normal dot halfway vector
TEMP half,specular;
ADD half,viewdir,state.light[0].position;
TEMP L;
DP4 L.x,half,half; # Normalize half
RSQ L,L.x;
MUL half,half,L;
DP3 specular,worldN,half;
POW  specular,specular.r,state.material.shininess.r;

ADD result.color, diffuse, specular;
END
