mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-06-08 03:42:09 +03:00
Fixes line-endings for files with extensions vcd, cc, txt, bat, fxc, inc, lst, proto, mak, mm, cfg, res, rc, def, vmt, vsh, vbsp, inl, asm, m4, vcproj, vcxproj, sln, in, java, la, manifest, am, and rad. Also fixes README, CONTRIBUTING, CONTRIBUTORS, LICENSE, CHANGES, COPYING, and gitignore. Finally, fixes executable bits.
92 lines
2.8 KiB
Plaintext
92 lines
2.8 KiB
Plaintext
//===================== Copyright (c) Valve Corporation. All Rights Reserved. ======================
|
|
//
|
|
// Example vertex shader that can be applied to models
|
|
//
|
|
//==================================================================================================
|
|
|
|
// DYNAMIC: "COMPRESSED_VERTS" "0..1"
|
|
// DYNAMIC: "DOWATERFOG" "0..1"
|
|
// DYNAMIC: "SKINNING" "0..1"
|
|
// DYNAMIC: "LIGHTING_PREVIEW" "0..1"
|
|
// DYNAMIC: "NUM_LIGHTS" "0..4"
|
|
|
|
#include "common_vs_fxc.h"
|
|
|
|
static const bool g_bSkinning = SKINNING ? true : false;
|
|
static const int g_FogType = DOWATERFOG;
|
|
|
|
const float4 cBaseTexCoordTransform[2] : register( SHADER_SPECIFIC_CONST_0 );
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Input vertex format
|
|
//-----------------------------------------------------------------------------
|
|
struct VS_INPUT
|
|
{
|
|
// This is all of the stuff that we ever use.
|
|
float4 vPos : POSITION;
|
|
float4 vBoneWeights : BLENDWEIGHT;
|
|
float4 vBoneIndices : BLENDINDICES;
|
|
float4 vNormal : NORMAL;
|
|
float2 vTexCoord0 : TEXCOORD0;
|
|
};
|
|
|
|
struct VS_OUTPUT
|
|
{
|
|
// Stuff that isn't seen by the pixel shader
|
|
float4 projPosSetup : POSITION;
|
|
float fog : FOG;
|
|
// Stuff that is seen by the pixel shader
|
|
float2 baseTexCoord : TEXCOORD0;
|
|
float4 lightAtten : TEXCOORD1;
|
|
float3 worldNormal : TEXCOORD2;
|
|
float3 worldPos : TEXCOORD3;
|
|
float3 projPos : TEXCOORD4;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Main shader entry point
|
|
//-----------------------------------------------------------------------------
|
|
VS_OUTPUT main( const VS_INPUT v )
|
|
{
|
|
VS_OUTPUT o = ( VS_OUTPUT )0;
|
|
|
|
float3 vNormal;
|
|
DecompressVertex_Normal( v.vNormal, vNormal );
|
|
|
|
float3 worldNormal, worldPos;
|
|
SkinPositionAndNormal( g_bSkinning, v.vPos, vNormal, v.vBoneWeights, v.vBoneIndices, worldPos, worldNormal );
|
|
|
|
// Transform into projection space
|
|
float4 vProjPos = mul( float4( worldPos, 1 ), cViewProj );
|
|
o.projPosSetup = vProjPos;
|
|
vProjPos.z = dot( float4( worldPos, 1 ), cViewProjZ );
|
|
|
|
o.projPos = vProjPos.xyz;
|
|
o.fog = CalcFog( worldPos, vProjPos.xyz, g_FogType );
|
|
|
|
// Needed for water fog alpha and diffuse lighting
|
|
o.worldPos = worldPos;
|
|
o.worldNormal = normalize( worldNormal );
|
|
|
|
// Scalar attenuations for four lights
|
|
o.lightAtten.xyz = float4(0,0,0,0);
|
|
#if ( NUM_LIGHTS > 0 )
|
|
o.lightAtten.x = GetVertexAttenForLight( worldPos, 0, false );
|
|
#endif
|
|
#if ( NUM_LIGHTS > 1 )
|
|
o.lightAtten.y = GetVertexAttenForLight( worldPos, 1, false );
|
|
#endif
|
|
#if ( NUM_LIGHTS > 2 )
|
|
o.lightAtten.z = GetVertexAttenForLight( worldPos, 2, false );
|
|
#endif
|
|
#if ( NUM_LIGHTS > 3 )
|
|
o.lightAtten.w = GetVertexAttenForLight( worldPos, 3, false );
|
|
#endif
|
|
|
|
// Base texture coordinate transform
|
|
o.baseTexCoord.x = dot( v.vTexCoord0, cBaseTexCoordTransform[0] );
|
|
o.baseTexCoord.y = dot( v.vTexCoord0, cBaseTexCoordTransform[1] );
|
|
|
|
return o;
|
|
}
|