home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 January / Gamestar_69_2005-01_dvd.iso / Dema / theprojectv1-0.exe / FCData / Shaders.pak / Shaders / HWScripts / Declarations / CGVPMacro.csi < prev    next >
Encoding:
Text File  |  2004-10-27  |  9.1 KB  |  211 lines

  1. ////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  Crytek Engine Source File.
  4. //  Vertex Program
  5. //  Copyright (C), Crytek Studios, 2001-2004.
  6. // -------------------------------------------------------------------------
  7. //  File name:   CGVPMacro.csi
  8. //  Version:     v1.00
  9. //  Created:     11/2/2004 by Andrey Honich.
  10. //  Compilers:   CG/HLSL
  11. //  Description: Vertex/pixel shaders common macroses
  12. // -------------------------------------------------------------------------
  13. //  History:
  14. //
  15. ////////////////////////////////////////////////////////////////////////////
  16.  
  17. #define _ATI_DEMO 1
  18.  
  19. //============================================================================
  20. // Vert. Attributes macro:
  21.  
  22. #define POSITION_3  VertArray (Verts 3 FLOAT Vertex)
  23. #define NORMAL_3    VertArray (Normal FLOAT Normals)
  24. #define TNORMAL_3   VertArray (Normal FLOAT TNormals)
  25. #define TANGENT_3   VertArray (Texture2 3 FLOAT Tangent)
  26. #define BINORMAL_3  VertArray (Texture3 3 FLOAT Binormal)
  27. #define TEXCOORD0_2 VertArray (Texture0 2 FLOAT Texture0)
  28. #define PRIM_COLOR  VertArray (Color 4 BYTE Color)
  29. #define SEC_COLOR   VertArray (SecColor 4 BYTE SecColor)
  30. #define TEXCOORD1_2 VertArray (Texture1 2 FLOAT Texture1)
  31. #define TANG_3X3    VertArray (Texture2 3 FLOAT Tangent) VertArray (Texture3 3 FLOAT Binormal) VertArray (Normal FLOAT TNormal)
  32.  
  33.  
  34. //============================================================================
  35. // Constants
  36.  
  37. // Vertex shader parameters
  38. #define VIEWPROJ_MATRIX uniform float4x4 ModelViewProj : register(c0)
  39. #define PROJ_MATRIX uniform float4x4 ProjMatrix : register(c0)
  40. #define LIGHT_POS uniform float4 LightPos : register(c4)
  41. #define CAMERA_POS uniform float4 CameraPos : register(c5)
  42. #define ATTEN uniform float4 AttenInfo : register(c6)
  43. #define BEND uniform float4 Bend : register(c7)
  44. #define TEX_MATRIX2x4 uniform float2x4 TexMatrix : register(c8)
  45. #define LIGHT_MATRIX uniform float4x4 LightMatrix : register(c10)
  46. #define CLIPPLANE uniform float4 ClipPlane : register(c14)
  47.  
  48. // Pixel shader parameters
  49. #define AMBIENT uniform float4 Ambient : register(c0)
  50. #define DIFFUSE uniform float4 Diffuse : register(c1)
  51. #define SPECULAR uniform float4 Specular : register(c2)
  52.  
  53. #define GLOBALFOGCOLOR uniform float4 GlobalFogColor : register(c7)
  54.  
  55. #ifdef RADEON
  56.   #define FLOAT float
  57.   #define FLOAT2 float2
  58.   #define FLOAT3 float3
  59.   #define FLOAT4 float4
  60. #endif
  61. #ifdef OTHER
  62.   #define FLOAT half
  63.   #define FLOAT2 half2
  64.   #define FLOAT3 half3
  65.   #define FLOAT4 half4
  66. #endif
  67.  
  68. #define HDR_OVERBRIGHT 8
  69. #define HDR_EXP_OFFSET 64
  70. #define HDR_EXP_BASE   1.04
  71. #define HDRFAKE_MAXOVERBRIGHT 16
  72.  
  73. SubrScript 'CommonSubroutines'
  74.   
  75. //============================================================================
  76. // Declarations macro:
  77.  
  78. //============================================================================
  79. // Vertex shader input
  80. #ifdef D3D
  81. #define IN_TNORMVEC float3 TNormal   : BLENDWEIGHT;
  82. #endif
  83.  
  84. #ifdef OPENGL
  85. #define IN_TNORMVEC float3 TNormal   : NORMAL;
  86. #endif
  87.  
  88. #define IN_TANGVECS                                          \
  89.           float3 Tangent   : TEXCOORD2;                      \
  90.           float3 Binormal  : TEXCOORD3;                      \
  91.           IN_TNORMVEC                                        \
  92.  
  93. #define IN_P    float4 Position  : POSITION;
  94. #define IN_N    float3 Normal    : NORMAL;
  95. #ifdef D3D
  96. #define IN_TN   float3 TNormal   : BLENDWEIGHT;
  97. #endif
  98. #ifdef OPENGL
  99. #define IN_TN   float3 TNormal   : NORMAL;
  100. #endif
  101. #define IN_C0   float4 Color     : COLOR0;
  102. #define IN_C1   float4 Color1    : COLOR1;
  103. #define IN_T0   float4 TexCoord0 : TEXCOORD0;
  104. #define IN_T1   float4 TexCoord1 : TEXCOORD1;
  105. #define IN_T2   float4 TexCoord2 : TEXCOORD2;
  106. #define IN_T3   float4 TexCoord3 : TEXCOORD3;
  107. #define IN_T4   float4 TexCoord4 : TEXCOORD4;
  108. #define IN_T5   float4 TexCoord5 : TEXCOORD5;
  109. #define IN_T6   float4 TexCoord6 : TEXCOORD6;
  110. #define IN_T7   float4 TexCoord7 : TEXCOORD7;
  111. #define IN_T8   float4 TexCoord8 : TEXCOORD8;
  112. #define IN_TANG                                              \
  113.           float3 Tangent   : TEXCOORD2;                      \
  114.           float3 Binormal  : TEXCOORD3;                      \
  115.           IN_TNORMVEC                                        \
  116.  
  117. //============================================================================
  118. // Vertex shader output
  119. #define OUT_P    float4 HPosition : POSITION;
  120. #define OUT_C0   float4 Color     : COLOR0;
  121. #define OUT_C0   float4 Color     : COLOR0;
  122. #define OUT_C1   float4 Color1    : COLOR1;
  123. #define OUT_T0   float4 Tex0      : TEXCOORD0;
  124. #define OUT_T0_2 float2 Tex0      : TEXCOORD0;
  125. #define OUT_T1   float4 Tex1      : TEXCOORD1;
  126. #define OUT_T1_2 float2 Tex1      : TEXCOORD1;
  127. #define OUT_T2   float4 Tex2      : TEXCOORD2;
  128. #define OUT_T2_2 float2 Tex2      : TEXCOORD2;
  129. #define OUT_T3   float4 Tex3      : TEXCOORD3;
  130. #define OUT_T3_2 float2 Tex3      : TEXCOORD3;
  131. #define OUT_T4   float4 Tex4      : TEXCOORD4;
  132. #define OUT_T4_2 float2 Tex4      : TEXCOORD4;
  133. #define OUT_T5   float4 Tex5      : TEXCOORD5;
  134. #define OUT_T5_2 float2 Tex5      : TEXCOORD5;
  135. #define OUT_T6   float4 Tex6      : TEXCOORD6;
  136. #define OUT_T6_2 float2 Tex6      : TEXCOORD6;
  137. #define OUT_T7   float4 Tex7      : TEXCOORD7;
  138. #define OUT_T7_2 float2 Tex7      : TEXCOORD7;
  139.  
  140. //============================================================================
  141. // Pixel shader output
  142. #define FOUT                                                 \
  143. # define _PIX_OUT                                            \
  144.         struct pixout                                        \
  145.         {                                                    \
  146.           float4 Color  : COLOR;                             \
  147.         };                                                   \
  148.  
  149. #define FOUT_DEPTH                                           \
  150. # define _PIX_OUT                                            \
  151. # define _DEPTH_OUT                                          \
  152.         struct pixout                                        \
  153.         {                                                    \
  154.           float4 Color  : COLOR;                             \
  155.           float  Depth  : DEPTH;                             \
  156.         };                                                   \
  157.  
  158. #define FOUT_2                                               \
  159. # define _MRT                                                \
  160. # define _PIX_OUT                                            \
  161.         struct pixout                                        \
  162.         {                                                    \
  163.           float4 Color0  : COLOR0;                           \
  164.           float4 Color1  : COLOR1;                           \
  165.         };                                                   \
  166.  
  167. #define FOUT_2_DEPTH                                         \
  168. # define _MRT                                                \
  169. # define _PIX_OUT                                            \
  170. # define _DEPTH_OUT                                          \
  171.         struct pixout                                        \
  172.         {                                                    \
  173.           float4 Color0  : COLOR0;                           \
  174.           float4 Color1  : COLOR1;                           \
  175.           float  Depth  : DEPTH;                             \
  176.         };                                                   \
  177.  
  178. //============================================================================
  179. // Functions
  180.  
  181. #define BENDING                                              \
  182.                                                              \
  183.           float4 vPos = IN.Position;                         \
  184.                                                              \
  185.           float fBF = max(vPos.z, 0) * Bend.z + Bend.w;      \
  186.           fBF = fBF * fBF;                                   \
  187.           fBF = fBF * fBF - Bend.w;                          \
  188.                                                              \
  189.           float4 vP;                                         \
  190.           vP.xy = Bend.xy * fBF;                             \
  191.                                                              \
  192.           float fLength = length(vPos.xyz);                  \
  193.                                                              \
  194.           vPos.xy = vPos.xy + vP.xy;                         \
  195.           float3 vDirect = normalize(vPos.xyz);              \
  196.           vPos.xyz = vDirect * fLength;
  197.  
  198. //============================================================================
  199.  
  200. #define TANG_MATR                                           \
  201.                                                             \
  202.           float3x3 objToTangentSpace;                       \
  203.           objToTangentSpace[0] = IN.Tangent;                \
  204.           objToTangentSpace[1] = IN.Binormal;               \
  205.           objToTangentSpace[2] = IN.TNormal;                \
  206.  
  207. //============================================================================
  208.  
  209. #define PROC_ATTENPIX lightVec * (AttenInfo.y * AttenInfo.z) + AttenInfo.z
  210. #define PROC_ATTENVERT (AttenInfo.x - 1/fiSqDist) * AttenInfo.y
  211.