/******************************************************************************/
/*                                                                            */
/*       Module Name          : terrain_vs.c                                  */
/*                                                                            */
/*       Author               : S.Chapman                                     */
/*                                                                            */
/*       Comment              : Simple vertex Shader for the fractal planets. */
/*                                                                            */
/******************************************************************************/

/******************************************************************************/
/* Declare Constants.                                                         */
/******************************************************************************/
matrix world_matrix     :register( c0);/* World Matrix.                       */
matrix view_matrix      :register( c4);/* View Matrix.                        */
matrix projection_matrix:register( c8);/* Projection Matrix.                  */


/******************************************************************************/
/* Declare the Input parameters.                                              */
/******************************************************************************/
struct VS_INPUT
{
   float3 position    : POSITION0;
   float3 normal      : NORMAL0;
   float2 text1       : TEXCOORD0;
};

/******************************************************************************/
/* Declare the Output parameters.                                             */
/******************************************************************************/
struct VS_OUTPUT
{
   float4 position    : POSITION0;
   vector diffuse     : COLOR0;
   vector specular    : COLOR1;
   float2 text1       : TEXCOORD0;
};

/******************************************************************************/
/* Terrain Vertex Shader Entry function.                                      */
/******************************************************************************/

VS_OUTPUT main( VS_INPUT  input)
{
   /* Declare and initialise the output.                                      */
   VS_OUTPUT output = ( VS_OUTPUT)0;
/*
   view_matrix = (1.000000, 0.000000, 0.000000, 0.000000,
                  0.000000, -1.000000,0.000000, 0.000000,
                  0.000000, 0.000000, 1.000000, 0.000000,
                  0.000000, 0.000000, 0.000000, 1.000000);

   projection_matrix = (1.732051, 0.000000, 0.000000, 0.000000,
                        0.000000, 2.164099, 0.000000, 0.000000,
                        0.000000, 0.000000, 1.000000, 1.000000,
                        0.000000, 0.000000, -5.000000, 0.000000);
   world_matrix = (1.000000, 0.000000, 0.000000, 0.000000,
                   0.000000, 1.000000, 0.000000, 0.000000,
                   0.000000, 0.000000, 1.000000, 0.000000,
                   0.000000, 0.000000, 86.562500, 1.000000);
*/
/*
   view_matrix._11 = 1.0;
   view_matrix._12 = 0.0;
   view_matrix._13 = 0.0;
   view_matrix._14 = 0.0;
   view_matrix._21 = 0.0;
   view_matrix._22 = -1.0;
   view_matrix._23 = 0.0;
   view_matrix._24 = 0.0;
   view_matrix._31 = 0.0;
   view_matrix._32 = 0.0;
   view_matrix._33 = 1.0;
   view_matrix._34 = 0.0;
   view_matrix._41 = 0.0;
   view_matrix._42 = 0.0;
   view_matrix._43 = 0.0;
   view_matrix._44 = 1.0;
*/
//   world_matrix._11 = 1.0;
//   world_matrix._12 = 0.0;
//   world_matrix._13 = 0.0;
//   world_matrix._14 = 0.0;
//   world_matrix._21 = 0.0;
//   world_matrix._22 = 1.0;
//   world_matrix._23 = 0.0;
//   world_matrix._24 = 0.0;
//   world_matrix._31 = 0.0;
//   world_matrix._32 = 0.0;
//   world_matrix._33 = 1.0;
//   world_matrix._34 = 0.0;
//   world_matrix._41 = 0.0;
//   world_matrix._42 = 0.0;
//   world_matrix._43 = 86.562500;
//   world_matrix._44 = 1.0;


//   projection_matrix._11 = 1.732051;
//   projection_matrix._12 = 0.0;
//   projection_matrix._13 = 0.0;
//   projection_matrix._14 = 0.0;
//   projection_matrix._21 = 0.0;
//   projection_matrix._22 = 2.164099;
//   projection_matrix._23 = 0.0;
//   projection_matrix._24 = 0.0;
//   projection_matrix._31 = 0.0;
//   projection_matrix._32 = 0.0;
//   projection_matrix._33 = 1.000000;
//   projection_matrix._34 = 1.000000;
//   projection_matrix._41 = 0.0;
//   projection_matrix._42 = 0.0;
//   projection_matrix._43 = -5.000000;
//   projection_matrix._44 = 0.0;


//view_matrix =0;
//projection_matrix =0;
//world_matrix =0;

   matrix    world_view = mul( world_matrix,view_matrix);

   /* Calculate the position in world view space.                             */
   float3 position = mul( float4( input.position, 1),
                        ( float4x3)world_view);
//   float3 position = mul( input.position,
//                        ( float4x3)world_view);
//   float3 position = mul( input.position,
//                        ( float4x3)world_matrix);
//   position = mul( position,
//                   ( float4x3)view_matrix);
//   position = mul( position,
//                   ( float4x3)projection_matrix);

   /* Calculate the projected position.                                       */
   output.position = mul( float4( position, 1), projection_matrix);
//   output.position = float4( position, 1);

   output.text1 = input.text1;
   output.diffuse.xyzw = 1.0f;
   output.specular.xyzw = 0.0f;

   return output;
}