|
|
// STATIC: "HALFLAMBERT" "0..1" // STATIC: "USE_STATIC_CONTROL_FLOW" "0..1" [vs20]
// DYNAMIC: "DYNAMIC_LIGHT" "0..1" // DYNAMIC: "STATIC_LIGHT" "0..1" // DYNAMIC: "NUM_LIGHTS" "0..2" [vs20]
// If using static control flow on Direct3D, we should use the NUM_LIGHTS=0 combo // SKIP: $USE_STATIC_CONTROL_FLOW && ( $NUM_LIGHTS > 0 ) [vs20]
#include "common_vs_fxc.h"
static const bool g_bHalfLambert = HALFLAMBERT ? true : false;
const float3 cLeafCenter : register(SHADER_SPECIFIC_CONST_0);
struct VS_INPUT { // This is all of the stuff that we ever use. float4 vPos : POSITION; float4 vNormal : NORMAL; float2 vTexCoord : TEXCOORD0; };
struct VS_OUTPUT { float4 projPos : POSITION; float2 texCoord : TEXCOORD0; float3 color : COLOR; };
VS_OUTPUT main( const VS_INPUT v ) { VS_OUTPUT o = ( VS_OUTPUT )0;
bool bDynamicLight = DYNAMIC_LIGHT ? true : false; bool bStaticLight = STATIC_LIGHT ? true : false;
float3 worldPos; worldPos = mul( v.vPos, cModel[0] );
float3 normal = v.vPos.xyz - cLeafCenter.xyz; normal = normalize( normal );
float3 worldNormal = mul( float4( normal, 0.0f ), cModel[0] );
#if ( USE_STATIC_CONTROL_FLOW ) || defined ( SHADER_MODEL_VS_3_0 ) float3 lighting = DoLighting( worldPos, worldNormal, float3(0,0,0), bStaticLight, bDynamicLight, g_bHalfLambert ); #else float3 lighting = DoLightingUnrolled( worldPos, worldNormal, float3(0,0,0), bStaticLight, bDynamicLight, g_bHalfLambert, NUM_LIGHTS ); #endif
float3 xAxis = float3( cViewModel[0].x, cViewModel[1].x, cViewModel[2].x ); float3 yAxis = float3( cViewModel[0].y, cViewModel[1].y, cViewModel[2].y );
worldPos += xAxis * v.vTexCoord.x; worldPos += yAxis * (1.0f-v.vTexCoord.y);
float4 projPos = mul( float4(worldPos, 1.0f), cViewProj );
float3 light_vec = float3( 1.0f, 0.0, 1.0 ); light_vec = normalize( light_vec );
o.projPos = projPos; // FIXME: if this shader gets put back into use, be sure this usage of normals jives with compressed verts o.texCoord = v.vNormal.xy; o.color = lighting;
return o; }
|