Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/materialsystem/stdshaders/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ target_sources_grouped(
example_model_dx9_helper.cpp
lightmappedgeneric_dx9.cpp
lightmappedgeneric_dx9_helper.cpp
water.cpp
screenspace_general.cpp
)

Expand All @@ -106,6 +107,7 @@ target_sources_grouped(
common_vs_fxc.h
example_model_dx9_helper.h
lightmappedgeneric_dx9_helper.h
water_ps2x_helper.h
shader_constant_register_map.h
)

Expand Down
20 changes: 19 additions & 1 deletion src/materialsystem/stdshaders/Water_vs20.fxc
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// STATIC: "BASETEXTURE" "0..1"
// STATIC: "MULTITEXTURE" "0..1"
// STATIC: "LIGHTMAPWATERFOG" "0..1"

// SKIP: $MULTITEXTURE && $BASETEXTURE

Expand All @@ -25,7 +26,11 @@ struct VS_OUTPUT
#if !defined( _X360 )
float vFog : FOG;
#endif
#if LIGHTMAPWATERFOG
float4 vBumpTexCoordlightmapTexCoord3 : TEXCOORD0;
#else
float2 vBumpTexCoord : TEXCOORD0;
#endif
float3 vTangentEyeVect : TEXCOORD1;
float4 vReflectXY_vRefractYX : TEXCOORD2;
float4 vWorldPos_projPosW : TEXCOORD3;
Expand All @@ -34,9 +39,13 @@ struct VS_OUTPUT
#if MULTITEXTURE
float4 vExtraBumpTexCoord : TEXCOORD6;
#endif
#if LIGHTMAPWATERFOG
HALF4 lightmapTexCoord1And2 : TEXCOORD7;
#else
#if BASETEXTURE
HALF4 lightmapTexCoord1And2 : TEXCOORD6;
HALF4 lightmapTexCoord3 : TEXCOORD7;
#endif
#endif
float4 fogFactorW : COLOR1;
};
Expand Down Expand Up @@ -88,8 +97,13 @@ VS_OUTPUT main( const VS_INPUT v )
o.vTangentEyeVect.z = dot( vWorldEyeVect, vObjNormal );

// Tranform bump coordinates
#if LIGHTMAPWATERFOG
o.vBumpTexCoordlightmapTexCoord3.x = dot( v.vBaseTexCoord, cBumpTexCoordTransform[0] );
o.vBumpTexCoordlightmapTexCoord3.y = dot( v.vBaseTexCoord, cBumpTexCoordTransform[1] );
#else
o.vBumpTexCoord.x = dot( v.vBaseTexCoord, cBumpTexCoordTransform[0] );
o.vBumpTexCoord.y = dot( v.vBaseTexCoord, cBumpTexCoordTransform[1] );
#endif
float f45x=v.vBaseTexCoord.x+v.vBaseTexCoord.y;
float f45y=v.vBaseTexCoord.y-v.vBaseTexCoord.x;
#if MULTITEXTURE
Expand All @@ -99,7 +113,7 @@ VS_OUTPUT main( const VS_INPUT v )
o.vExtraBumpTexCoord.w=v.vBaseTexCoord.x*0.45+TexOffsets.w;
#endif

#if BASETEXTURE
#if BASETEXTURE || LIGHTMAPWATERFOG
o.lightmapTexCoord1And2.xy = v.vLightmapTexCoord + v.vLightmapTexCoordOffset;

float2 lightmapTexCoord2 = o.lightmapTexCoord1And2.xy + v.vLightmapTexCoordOffset;
Expand All @@ -109,7 +123,11 @@ VS_OUTPUT main( const VS_INPUT v )
o.lightmapTexCoord1And2.w = lightmapTexCoord2.x;
o.lightmapTexCoord1And2.z = lightmapTexCoord2.y;

#if LIGHTMAPWATERFOG
o.vBumpTexCoordlightmapTexCoord3.zw = lightmapTexCoord3;
#else
o.lightmapTexCoord3.xy = lightmapTexCoord3;
#endif
#endif

return o;
Expand Down
19 changes: 16 additions & 3 deletions src/materialsystem/stdshaders/include/Water_vs20.inc
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ class water_vs20_Static_Index
{
unsigned int m_nBASETEXTURE : 2;
unsigned int m_nMULTITEXTURE : 2;
unsigned int m_nLIGHTMAPWATERFOG : 2;
#ifdef _DEBUG
bool m_bBASETEXTURE : 1;
bool m_bMULTITEXTURE : 1;
bool m_bLIGHTMAPWATERFOG : 1;
#endif // _DEBUG
public:
void SetBASETEXTURE( int i )
Expand All @@ -31,25 +33,36 @@ public:
#endif // _DEBUG
}

void SetLIGHTMAPWATERFOG( int i )
{
Assert( i >= 0 && i <= 1 );
m_nLIGHTMAPWATERFOG = i;
#ifdef _DEBUG
m_bLIGHTMAPWATERFOG = true;
#endif // _DEBUG
}

water_vs20_Static_Index( )
{
m_nBASETEXTURE = 0;
m_nMULTITEXTURE = 0;
m_nLIGHTMAPWATERFOG = 0;
#ifdef _DEBUG
m_bBASETEXTURE = false;
m_bMULTITEXTURE = false;
m_bLIGHTMAPWATERFOG = false;
#endif // _DEBUG
}

int GetIndex() const
{
Assert( m_bBASETEXTURE && m_bMULTITEXTURE );
Assert( m_bBASETEXTURE && m_bMULTITEXTURE && m_bLIGHTMAPWATERFOG );
AssertMsg( !( m_nMULTITEXTURE && m_nBASETEXTURE ), "Invalid combo combination ( MULTITEXTURE && BASETEXTURE )" );
return ( 1 * m_nBASETEXTURE ) + ( 2 * m_nMULTITEXTURE ) + 0;
return ( 1 * m_nBASETEXTURE ) + ( 2 * m_nMULTITEXTURE ) + ( 4 * m_nLIGHTMAPWATERFOG ) + 0;
}
};

#define shaderStaticTest_water_vs20 vsh_forgot_to_set_static_BASETEXTURE + vsh_forgot_to_set_static_MULTITEXTURE
#define shaderStaticTest_water_vs20 vsh_forgot_to_set_static_BASETEXTURE + vsh_forgot_to_set_static_MULTITEXTURE + vsh_forgot_to_set_static_LIGHTMAPWATERFOG


class water_vs20_Dynamic_Index
Expand Down
19 changes: 16 additions & 3 deletions src/materialsystem/stdshaders/include/water_ps20b.inc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class water_ps20b_Static_Index
unsigned int m_nABOVEWATER : 2;
unsigned int m_nBLURRY_REFRACT : 2;
unsigned int m_nNORMAL_DECODE_MODE : 1;
unsigned int m_nLIGHTMAPWATERFOG : 2;
#ifdef _DEBUG
bool m_bBASETEXTURE : 1;
bool m_bMULTITEXTURE : 1;
Expand All @@ -28,6 +29,7 @@ class water_ps20b_Static_Index
bool m_bABOVEWATER : 1;
bool m_bBLURRY_REFRACT : 1;
bool m_bNORMAL_DECODE_MODE : 1;
bool m_bLIGHTMAPWATERFOG : 1;
#endif // _DEBUG
public:
void SetCONVERT_TO_SRGB( int i )
Expand Down Expand Up @@ -99,6 +101,15 @@ public:
#endif // _DEBUG
}

void SetLIGHTMAPWATERFOG( int i )
{
Assert( i >= 0 && i <= 1 );
m_nLIGHTMAPWATERFOG = i;
#ifdef _DEBUG
m_bLIGHTMAPWATERFOG = true;
#endif // _DEBUG
}

water_ps20b_Static_Index( )
{
m_nCONVERT_TO_SRGB = g_pHardwareConfig->NeedsShaderSRGBConversion();
Expand All @@ -109,6 +120,7 @@ public:
m_nABOVEWATER = 0;
m_nBLURRY_REFRACT = 0;
m_nNORMAL_DECODE_MODE = 0;
m_nLIGHTMAPWATERFOG = 0;
#ifdef _DEBUG
m_bBASETEXTURE = false;
m_bMULTITEXTURE = false;
Expand All @@ -117,18 +129,19 @@ public:
m_bABOVEWATER = false;
m_bBLURRY_REFRACT = false;
m_bNORMAL_DECODE_MODE = false;
m_bLIGHTMAPWATERFOG = false;
#endif // _DEBUG
}

int GetIndex() const
{
Assert( m_bBASETEXTURE && m_bMULTITEXTURE && m_bREFLECT && m_bREFRACT && m_bABOVEWATER && m_bBLURRY_REFRACT && m_bNORMAL_DECODE_MODE );
Assert( m_bBASETEXTURE && m_bMULTITEXTURE && m_bREFLECT && m_bREFRACT && m_bABOVEWATER && m_bBLURRY_REFRACT && m_bNORMAL_DECODE_MODE && m_bLIGHTMAPWATERFOG );
AssertMsg( !( m_nMULTITEXTURE && m_nBASETEXTURE ), "Invalid combo combination ( MULTITEXTURE && BASETEXTURE )" );
return ( 6 * m_nCONVERT_TO_SRGB ) + ( 12 * m_nBASETEXTURE ) + ( 24 * m_nMULTITEXTURE ) + ( 48 * m_nREFLECT ) + ( 96 * m_nREFRACT ) + ( 192 * m_nABOVEWATER ) + ( 384 * m_nBLURRY_REFRACT ) + ( 768 * m_nNORMAL_DECODE_MODE ) + 0;
return ( 6 * m_nCONVERT_TO_SRGB ) + ( 12 * m_nBASETEXTURE ) + ( 24 * m_nMULTITEXTURE ) + ( 48 * m_nREFLECT ) + ( 96 * m_nREFRACT ) + ( 192 * m_nABOVEWATER ) + ( 384 * m_nBLURRY_REFRACT ) + ( 768 * m_nNORMAL_DECODE_MODE ) + ( 768 * m_nLIGHTMAPWATERFOG ) + 0;
}
};

#define shaderStaticTest_water_ps20b psh_forgot_to_set_static_BASETEXTURE + psh_forgot_to_set_static_MULTITEXTURE + psh_forgot_to_set_static_REFLECT + psh_forgot_to_set_static_REFRACT + psh_forgot_to_set_static_ABOVEWATER + psh_forgot_to_set_static_BLURRY_REFRACT + psh_forgot_to_set_static_NORMAL_DECODE_MODE
#define shaderStaticTest_water_ps20b psh_forgot_to_set_static_BASETEXTURE + psh_forgot_to_set_static_MULTITEXTURE + psh_forgot_to_set_static_REFLECT + psh_forgot_to_set_static_REFRACT + psh_forgot_to_set_static_ABOVEWATER + psh_forgot_to_set_static_BLURRY_REFRACT + psh_forgot_to_set_static_NORMAL_DECODE_MODE + psh_forgot_to_set_static_LIGHTMAPWATERFOG


class water_ps20b_Dynamic_Index
Expand Down
33 changes: 33 additions & 0 deletions src/materialsystem/stdshaders/water.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ BEGIN_VS_SHADER( Water_DX90,
SHADER_PARAM( SCROLL1, SHADER_PARAM_TYPE_COLOR, "", "" )
SHADER_PARAM( SCROLL2, SHADER_PARAM_TYPE_COLOR, "", "" )
SHADER_PARAM( BLURREFRACT, SHADER_PARAM_TYPE_BOOL, "0", "Cause the refraction to be blurry on ps2b hardware" )
#ifdef NEO
SHADER_PARAM( LIGHTMAPWATERFOG, SHADER_PARAM_TYPE_BOOL, "0", "Cast shadows onto the fog component of the water surface" )
#endif // NEO
END_SHADER_PARAMS

SHADER_INIT_PARAMS()
Expand Down Expand Up @@ -179,6 +182,7 @@ BEGIN_VS_SHADER( Water_DX90,
inline void DrawReflectionRefraction( IMaterialVar **params, IShaderShadow* pShaderShadow,
IShaderDynamicAPI* pShaderAPI, bool bReflection, bool bRefraction )
{
bool blightMapWaterFog = params[LIGHTMAPWATERFOG]->GetIntValue();
SHADOW_STATE
{
SetInitialShadowState( );
Expand All @@ -205,6 +209,15 @@ BEGIN_VS_SHADER( Water_DX90,
pShaderShadow->EnableSRGBRead( SHADER_SAMPLER3, true );
}
}
#ifdef NEO
if (blightMapWaterFog)
{
// LIGHTMAP
pShaderShadow->EnableTexture( SHADER_SAMPLER3, true );
pShaderShadow->EnableSRGBRead( SHADER_SAMPLER3, true );
}
#endif // NEO

// normal map
pShaderShadow->EnableTexture( SHADER_SAMPLER4, true );
// Normalizing cube map
Expand All @@ -216,7 +229,11 @@ BEGIN_VS_SHADER( Water_DX90,
// texcoord1 : lightmap texcoord
// texcoord2 : lightmap texcoord offset
int numTexCoords = 1;
#ifdef NEO
if( params[BASETEXTURE]->IsTexture() || blightMapWaterFog )
#else
if( params[BASETEXTURE]->IsTexture() )
#endif // NEO
{
numTexCoords = 3;
}
Expand All @@ -228,6 +245,11 @@ BEGIN_VS_SHADER( Water_DX90,
DECLARE_STATIC_VERTEX_SHADER( water_vs20 );
SET_STATIC_VERTEX_SHADER_COMBO( MULTITEXTURE,fabs(Scroll1.x) > 0.0);
SET_STATIC_VERTEX_SHADER_COMBO( BASETEXTURE, params[BASETEXTURE]->IsTexture() );
#ifdef NEO
SET_STATIC_VERTEX_SHADER_COMBO(LIGHTMAPWATERFOG, blightMapWaterFog);
#else // Still custom NEO code
SET_STATIC_VERTEX_SHADER_COMBO(LIGHTMAPWATERFOG, 0);
#endif // NEO
SET_STATIC_VERTEX_SHADER( water_vs20 );

// "REFLECT" "0..1"
Expand All @@ -243,6 +265,11 @@ BEGIN_VS_SHADER( Water_DX90,
SET_STATIC_PIXEL_SHADER_COMBO( BASETEXTURE, params[BASETEXTURE]->IsTexture() );
SET_STATIC_PIXEL_SHADER_COMBO( BLURRY_REFRACT, params[BLURREFRACT]->GetIntValue() );
SET_STATIC_PIXEL_SHADER_COMBO( NORMAL_DECODE_MODE, (int) NORMAL_DECODE_NONE );
#ifdef NEO
SET_STATIC_PIXEL_SHADER_COMBO(LIGHTMAPWATERFOG, blightMapWaterFog);
#else // Still custom NEO code
SET_STATIC_PIXEL_SHADER_COMBO(LIGHTMAPWATERFOG, 0);
#endif // NEO
SET_STATIC_PIXEL_SHADER( water_ps20b );
}
else
Expand Down Expand Up @@ -282,6 +309,12 @@ BEGIN_VS_SHADER( Water_DX90,
BindTexture( SHADER_SAMPLER1, BASETEXTURE, FRAME );
pShaderAPI->BindStandardTexture( SHADER_SAMPLER3, TEXTURE_LIGHTMAP );
}
#ifdef NEO
else if (blightMapWaterFog)
{
pShaderAPI->BindStandardTexture( SHADER_SAMPLER3, TEXTURE_LIGHTMAP );
}
#endif // NEO

pShaderAPI->BindStandardTexture( SHADER_SAMPLER5, TEXTURE_NORMALIZATION_CUBEMAP_SIGNED );

Expand Down
28 changes: 24 additions & 4 deletions src/materialsystem/stdshaders/water_ps2x.fxc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
// STATIC: "NORMAL_DECODE_MODE" "0..0" [XBOX]
// STATIC: "NORMAL_DECODE_MODE" "0..0" [PC]

// STATIC: "LIGHTMAPWATERFOG" "0..1"

// DYNAMIC: "PIXELFOGTYPE" "0..2"
// DYNAMIC: "WRITE_DEPTH_TO_DESTALPHA" "0..1" [ps20b] [PC]
// DYNAMIC: "WRITE_DEPTH_TO_DESTALPHA" "0..0" [ps20b] [XBOX]
Expand All @@ -30,7 +32,7 @@ sampler RefractSampler : register( s0 );
sampler BaseTextureSampler : register( s1 );
#endif
sampler ReflectSampler : register( s2 );
#if BASETEXTURE
#if BASETEXTURE || LIGHTMAPWATERFOG
sampler LightmapSampler : register( s3 );
#endif
sampler NormalSampler : register( s4 );
Expand All @@ -51,7 +53,11 @@ const float3 g_EyePos : register( c9 );

struct PS_INPUT
{
#if LIGHTMAPWATERFOG
float4 vBumpTexCoordlightmapTexCoord3 : TEXCOORD0;
#else
float2 vBumpTexCoord : TEXCOORD0;
#endif
half3 vTangentEyeVect : TEXCOORD1;
float4 vReflectXY_vRefractYX : TEXCOORD2;
float4 vWorldPos_projPosW : TEXCOORD3;
Expand All @@ -60,11 +66,15 @@ struct PS_INPUT
#if MULTITEXTURE
float4 vExtraBumpTexCoord : TEXCOORD6;
#endif
#if LIGHTMAPWATERFOG
HALF4 lightmapTexCoord1And2 : TEXCOORD7;
#else
#if BASETEXTURE
// CENTROID: TEXCOORD6
HALF4 lightmapTexCoord1And2 : TEXCOORD6;
// CENTROID: TEXCOORD7
HALF4 lightmapTexCoord3 : TEXCOORD7;
#endif
#endif

float4 fogFactorW : COLOR1;
Expand All @@ -74,7 +84,11 @@ float4 main( PS_INPUT i ) : COLOR
{
DrawWater_params_t params;

#if LIGHTMAPWATERFOG
params.vBumpTexCoord = i.vBumpTexCoordlightmapTexCoord3.xy;
#else
params.vBumpTexCoord = i.vBumpTexCoord;
#endif
#if MULTITEXTURE
params.vExtraBumpTexCoord = i.vExtraBumpTexCoord;
#endif
Expand All @@ -86,9 +100,13 @@ float4 main( PS_INPUT i ) : COLOR
params.vRefractTint = vRefractTint;
params.vTangentEyeVect = i.vTangentEyeVect;
params.waterFogColor = g_WaterFogColor;
#if BASETEXTURE
#if BASETEXTURE || LIGHTMAPWATERFOG
params.lightmapTexCoord1And2 = i.lightmapTexCoord1And2;
#if LIGHTMAPWATERFOG
params.lightmapTexCoord3 = i.vBumpTexCoordlightmapTexCoord3.zw;
#else
params.lightmapTexCoord3 = i.lightmapTexCoord3;
#endif
#endif
params.vProjPos = i.vProjPos;
params.pixelFogParams = g_PixelFogParams;
Expand All @@ -102,8 +120,10 @@ float4 main( PS_INPUT i ) : COLOR
DrawWater( params,
// yay. . can't put sampler in a struct.
#if BASETEXTURE
BaseTextureSampler,
LightmapSampler,
BaseTextureSampler,
#endif
#if BASETEXTURE || LIGHTMAPWATERFOG
LightmapSampler,
#endif
NormalSampler, RefractSampler, ReflectSampler,
result, fogFactor );
Expand Down
Loading
Loading