Yeah it's too long, removing one or two parts of it makes it compile properly.
How do you force load a shader then?
Vertex shader:
Code:
struct VS_IN
{
float4 Position : POSITION;
float3 Normal : NORMAL;
float2 TexturePosition : TEXCOORD;
};
struct VS_OUT
{
float4 Position : POSITION;
float2 TexturePosition : TEXCOORD0;
float3 Light : TEXCOORD1;
float3 Normal : TEXCOORD2;
float3 View : TEXCOORD3;
};
float4x4 WorldMatrix;
float4x4 ViewMatrix;
float4x4 ProjectionMatrix;
float4x4 WorldViewProjectionMatrix;
float4 CameraPosition;
float4 CameraDirection;
float4 AmbientColor;
float4 DiffuseColor;
float4 SpecularColor;
VS_OUT main(VS_IN In)
{
VS_OUT Out;
float3 WorldPosition = normalize(mul(In.Position, WorldMatrix));
Out.Position = mul(In.Position, WorldViewProjectionMatrix);
Out.TexturePosition = In.TexturePosition;
Out.Light = (-CameraDirection + 1) / 2;
Out.Normal = (normalize(mul(In.Normal, WorldMatrix)) + 1) / 2;
Out.View = (normalize(CameraPosition - WorldPosition) + 1) / 2;
return Out;
}
Pixel shader:
Code:
struct PS_IN
{
float4 Position : POSITION;
float2 TexturePosition : TEXCOORD0;
float3 Light : TEXCOORD1;
float3 Normal : TEXCOORD2;
float3 View : TEXCOORD3;
};
struct PS_OUT
{
float4 Color : COLOR;
};
float4x4 WorldMatrix;
float4x4 ViewMatrix;
float4x4 ProjectionMatrix;
float4x4 WorldViewProjectionMatrix;
float4 CameraPosition;
float4 CameraDirection;
float4 AmbientColor;
float4 DiffuseColor;
float4 SpecularColor;
sampler2D Texture;
PS_OUT main(PS_IN In)
{
PS_OUT Out;
float3 Light = 2 * In.Light - 1;
float3 Normal = 2 * In.Normal - 1;
float3 View = 2 * In.View - 1;
float DiffuseFactor = dot(Light, Normal);
float3 Reflect = normalize(2 * DiffuseFactor * Normal - Light);
float4 SpecularFactor = pow(dot(Reflect, View), 8);
Out.Color = AmbientColor + (DiffuseColor * DiffuseFactor) + (SpecularColor * SpecularFactor);
Out.Color.a = 1.0f;
return Out;
}
(doesn't consider the texture... yet...)