// Copyright (C) 2009-2010 Amundis
// Heavily based on the OpenGL driver implemented by Nikolaus Gebhardt
// and OpenGL ES driver implemented by Christian Stehno
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in Irrlicht.h
#define MAX_LIGHTS 2

attribute vec4 inVertexPosition;
attribute vec4 inVertexColor;
attribute vec4 inTexCoord0;
attribute vec3 inVertexNormal;
attribute vec3 inVertexTangent;
attribute vec3 inVertexBinormal;

uniform mat4 uMvpMatrix;
uniform vec4 uLightPos[MAX_LIGHTS];
uniform vec4 uLightColor[MAX_LIGHTS];
uniform vec3 uEyePos;

varying vec4 varTexCoord;
varying vec3 varLightVector[MAX_LIGHTS];
varying vec4 varLightColor[MAX_LIGHTS];
varying vec3 varEyeVector;

varying vec4 debug;

void main(void)
{
	debug = vec4(inVertexNormal, 1.0);
	// transform position to clip space
	gl_Position = uMvpMatrix * inVertexPosition;
	
	// vertex - lightpositions
	vec4 tempLightVector0 = uLightPos[0] - inVertexPosition;
	vec4 tempLightVector1 = uLightPos[1] - inVertexPosition;
	
	// eye vector
	vec4 Temp = vec4(uEyePos, 1.0) - inVertexPosition;
	
	// transform the light vector 1 with U, V, W
	varLightVector[0].x = dot(inVertexTangent,  tempLightVector0.xyz);
	varLightVector[0].y = dot(inVertexBinormal, tempLightVector0.xyz);
	varLightVector[0].z = dot(inVertexNormal,   tempLightVector0.xyz);

	
	// transform the light vector 2 with U, V, W
	varLightVector[1].x = dot(inVertexTangent,  tempLightVector1.xyz);
	varLightVector[1].y = dot(inVertexBinormal, tempLightVector1.xyz);
	varLightVector[1].z = dot(inVertexNormal,   tempLightVector1.xyz);
	
	// transform the eye vector with U, V, W 
	varEyeVector.x = dot(inVertexTangent,  Temp.xyz);
	varEyeVector.y = dot(inVertexBinormal, Temp.xyz);
	varEyeVector.z = dot(inVertexNormal,   Temp.xyz);
	varEyeVector *= vec3(1.0,-1.0, -1.0);
	varEyeVector = normalize(varEyeVector);

	// calculate attenuation of light 0
	varLightColor[0].w = 0.0;
	varLightColor[0].x = dot(tempLightVector0, tempLightVector0);
	varLightColor[0].x *= uLightColor[0].w;
	varLightColor[0] = vec4(inversesqrt(varLightColor[0].x));
	varLightColor[0] *= uLightColor[0];
	
	// normalize light vector 0
	varLightVector[0] = normalize(varLightVector[0]);
	
	// calculate attenuation of light 1
	varLightColor[1].w = 0.0;
	varLightColor[1].x = dot(tempLightVector1, tempLightVector1);
	varLightColor[1].x *= uLightColor[1].w;
	varLightColor[1] = vec4(inversesqrt(varLightColor[1].x));
	varLightColor[1] *= uLightColor[1];
	
	// normalize light vector 1
	varLightVector[1] = normalize(varLightVector[1]);
	
	// move out texture coordinates and original alpha value
	varTexCoord = inTexCoord0;
	varLightColor[0].a = inVertexColor.a;
}