This should include the latest version of every shader that was in the 2007 SDK. It also includes a smattering of debug shaders, both VR distortion shaders, and other assorted shaders that will hopefully be useful. None of these new files are included in the game shader DLL project. If you need to modify one of these shaders for use in your mod you will need to rename it so that you don't collide with the version of that shader that lives in stdshader_dx9.dll.
491 lines
15 KiB
C++
491 lines
15 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//=============================================================================//
|
|
|
|
#include "BaseVSShader.h"
|
|
#include <string.h>
|
|
#include "const.h"
|
|
|
|
#include "cpp_shader_constant_register_map.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
#include "sprite_vs20.inc"
|
|
#include "sprite_ps20.inc"
|
|
#include "sprite_ps20b.inc"
|
|
|
|
// WARNING! Change these in engine/SpriteGn.h if you change them here!
|
|
#define SPR_VP_PARALLEL_UPRIGHT 0
|
|
#define SPR_FACING_UPRIGHT 1
|
|
#define SPR_VP_PARALLEL 2
|
|
#define SPR_ORIENTED 3
|
|
#define SPR_VP_PARALLEL_ORIENTED 4
|
|
|
|
|
|
DEFINE_FALLBACK_SHADER( Sprite, Sprite_DX9 )
|
|
|
|
BEGIN_VS_SHADER( Sprite_DX9,
|
|
"Help for Sprite_DX9" )
|
|
|
|
BEGIN_SHADER_PARAMS
|
|
SHADER_PARAM( SPRITEORIGIN, SHADER_PARAM_TYPE_VEC3, "[0 0 0]", "sprite origin" )
|
|
SHADER_PARAM( SPRITEORIENTATION, SHADER_PARAM_TYPE_INTEGER, "0", "sprite orientation" )
|
|
SHADER_PARAM( SPRITERENDERMODE, SHADER_PARAM_TYPE_INTEGER, "0", "sprite rendermode" )
|
|
SHADER_PARAM( IGNOREVERTEXCOLORS, SHADER_PARAM_TYPE_BOOL, "1", "ignore vertex colors" )
|
|
SHADER_PARAM( NOSRGB, SHADER_PARAM_TYPE_BOOL, "0", "do not operate in srgb space" )
|
|
SHADER_PARAM( HDRCOLORSCALE, SHADER_PARAM_TYPE_FLOAT, "1.0", "hdr color scale" )
|
|
END_SHADER_PARAMS
|
|
|
|
SHADER_FALLBACK
|
|
{
|
|
if (g_pHardwareConfig->GetDXSupportLevel() < 90)
|
|
return "Sprite_DX8";
|
|
return 0;
|
|
}
|
|
SHADER_INIT_PARAMS()
|
|
{
|
|
// FIXME: This can share code with sprite.cpp
|
|
if (!params[ALPHA]->IsDefined())
|
|
{
|
|
params[ALPHA]->SetFloatValue( 1.0f );
|
|
}
|
|
|
|
if (!params[HDRCOLORSCALE]->IsDefined())
|
|
{
|
|
params[HDRCOLORSCALE]->SetFloatValue( 1.0f );
|
|
}
|
|
|
|
if ( !params[NOSRGB]->IsDefined() )
|
|
{
|
|
// Disable sRGB reads and writes by default
|
|
params[NOSRGB]->SetIntValue( 1 );
|
|
}
|
|
|
|
SET_FLAGS( MATERIAL_VAR_NO_DEBUG_OVERRIDE );
|
|
SET_FLAGS( MATERIAL_VAR_VERTEXCOLOR );
|
|
SET_FLAGS( MATERIAL_VAR_VERTEXALPHA );
|
|
|
|
// translate from a string orientation to an enumeration
|
|
if (params[SPRITEORIENTATION]->IsDefined())
|
|
{
|
|
const char *orientationString = params[SPRITEORIENTATION]->GetStringValue();
|
|
if( stricmp( orientationString, "parallel_upright" ) == 0 )
|
|
{
|
|
params[SPRITEORIENTATION]->SetIntValue( SPR_VP_PARALLEL_UPRIGHT );
|
|
}
|
|
else if( stricmp( orientationString, "facing_upright" ) == 0 )
|
|
{
|
|
params[SPRITEORIENTATION]->SetIntValue( SPR_FACING_UPRIGHT );
|
|
}
|
|
else if( stricmp( orientationString, "vp_parallel" ) == 0 )
|
|
{
|
|
params[SPRITEORIENTATION]->SetIntValue( SPR_VP_PARALLEL );
|
|
}
|
|
else if( stricmp( orientationString, "oriented" ) == 0 )
|
|
{
|
|
params[SPRITEORIENTATION]->SetIntValue( SPR_ORIENTED );
|
|
}
|
|
else if( stricmp( orientationString, "vp_parallel_oriented" ) == 0 )
|
|
{
|
|
params[SPRITEORIENTATION]->SetIntValue( SPR_VP_PARALLEL_ORIENTED );
|
|
}
|
|
else
|
|
{
|
|
Warning( "error with $spriteOrientation\n" );
|
|
params[SPRITEORIENTATION]->SetIntValue( SPR_VP_PARALLEL_UPRIGHT );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// default case
|
|
params[SPRITEORIENTATION]->SetIntValue( SPR_VP_PARALLEL_UPRIGHT );
|
|
}
|
|
}
|
|
|
|
SHADER_INIT
|
|
{
|
|
bool bSRGB = s_ppParams[NOSRGB]->GetIntValue() == 0;
|
|
LoadTexture( BASETEXTURE, bSRGB ? TEXTUREFLAGS_SRGB : 0 );
|
|
}
|
|
|
|
#define SHADER_USE_VERTEX_COLOR 1
|
|
#define SHADER_USE_CONSTANT_COLOR 2
|
|
|
|
void SetSpriteCommonShadowState( unsigned int shaderFlags )
|
|
{
|
|
IShaderShadow *pShaderShadow = s_pShaderShadow;
|
|
s_pShaderShadow->EnableTexture( SHADER_SAMPLER0, true );
|
|
bool bSRGB = s_ppParams[NOSRGB]->GetIntValue() == 0;
|
|
pShaderShadow->EnableSRGBRead( SHADER_SAMPLER0, bSRGB );
|
|
|
|
// Only enabling this on OSX() - it causes GL mode's light glow sprites to be much darker vs. D3D9 under Linux/Win GL.
|
|
bool bSRGBOutputAdapter = ( IsOSX() && !g_pHardwareConfig->FakeSRGBWrite() ) && !bSRGB;
|
|
|
|
unsigned int flags = VERTEX_POSITION;
|
|
if( shaderFlags & SHADER_USE_VERTEX_COLOR )
|
|
{
|
|
flags |= VERTEX_COLOR;
|
|
}
|
|
int numTexCoords = 1;
|
|
s_pShaderShadow->VertexShaderVertexFormat( flags, numTexCoords, 0, 0 );
|
|
|
|
DECLARE_STATIC_VERTEX_SHADER( sprite_vs20 );
|
|
SET_STATIC_VERTEX_SHADER_COMBO( VERTEXCOLOR, ( shaderFlags & SHADER_USE_VERTEX_COLOR ) ? true : false );
|
|
SET_STATIC_VERTEX_SHADER_COMBO( SRGB, bSRGB );
|
|
SET_STATIC_VERTEX_SHADER( sprite_vs20 );
|
|
|
|
if( g_pHardwareConfig->SupportsPixelShaders_2_b() || g_pHardwareConfig->ShouldAlwaysUseShaderModel2bShaders() ) // Always send GL down this path
|
|
{
|
|
DECLARE_STATIC_PIXEL_SHADER( sprite_ps20b );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( VERTEXCOLOR, ( shaderFlags & SHADER_USE_VERTEX_COLOR ) ? true : false );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( CONSTANTCOLOR, ( shaderFlags & SHADER_USE_CONSTANT_COLOR ) ? true : false );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( HDRTYPE, g_pHardwareConfig->GetHDRType() );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( SRGB, bSRGB );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( SRGB_OUTPUT_ADAPTER, bSRGBOutputAdapter );
|
|
SET_STATIC_PIXEL_SHADER( sprite_ps20b );
|
|
}
|
|
else
|
|
{
|
|
DECLARE_STATIC_PIXEL_SHADER( sprite_ps20 );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( VERTEXCOLOR, ( shaderFlags & SHADER_USE_VERTEX_COLOR ) ? true : false );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( CONSTANTCOLOR, ( shaderFlags & SHADER_USE_CONSTANT_COLOR ) ? true : false );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( HDRTYPE, g_pHardwareConfig->GetHDRType() );
|
|
SET_STATIC_PIXEL_SHADER_COMBO( SRGB, bSRGB );
|
|
SET_STATIC_PIXEL_SHADER( sprite_ps20 );
|
|
}
|
|
|
|
// OSX always has to sRGB write (don't do this on Linux/Win GL - it causes glow sprites to be way too dark)
|
|
s_pShaderShadow->EnableSRGBWrite( bSRGB || ( IsOSX() && !g_pHardwareConfig->FakeSRGBWrite() ) );
|
|
}
|
|
|
|
void SetSpriteCommonDynamicState( unsigned int shaderFlags )
|
|
{
|
|
IShaderDynamicAPI *pShaderAPI = s_pShaderAPI;
|
|
bool bSRGB = s_ppParams[NOSRGB]->GetIntValue() == 0;
|
|
|
|
BindTexture( SHADER_SAMPLER0, BASETEXTURE, FRAME );
|
|
|
|
MaterialFogMode_t fogType = s_pShaderAPI->GetSceneFogMode();
|
|
int fogIndex = ( fogType == MATERIAL_FOG_LINEAR_BELOW_FOG_Z ) ? 1 : 0;
|
|
DECLARE_DYNAMIC_VERTEX_SHADER( sprite_vs20 );
|
|
SET_DYNAMIC_VERTEX_SHADER_COMBO( DOWATERFOG, fogIndex );
|
|
SET_DYNAMIC_VERTEX_SHADER( sprite_vs20 );
|
|
|
|
if( g_pHardwareConfig->SupportsPixelShaders_2_b() || g_pHardwareConfig->ShouldAlwaysUseShaderModel2bShaders() ) // Always send GL down this path
|
|
{
|
|
DECLARE_DYNAMIC_PIXEL_SHADER( sprite_ps20b );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( HDRENABLED, IsHDREnabled() );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( PIXELFOGTYPE, pShaderAPI->GetPixelFogCombo() );
|
|
SET_DYNAMIC_PIXEL_SHADER( sprite_ps20b );
|
|
}
|
|
else
|
|
{
|
|
DECLARE_DYNAMIC_PIXEL_SHADER( sprite_ps20 );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( HDRENABLED, IsHDREnabled() );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( PIXELFOGTYPE, pShaderAPI->GetPixelFogCombo() );
|
|
SET_DYNAMIC_PIXEL_SHADER( sprite_ps20 );
|
|
}
|
|
|
|
pShaderAPI->SetPixelShaderFogParams( PSREG_FOG_PARAMS );
|
|
|
|
float vEyePos_SpecExponent[4];
|
|
pShaderAPI->GetWorldSpaceCameraPosition( vEyePos_SpecExponent );
|
|
vEyePos_SpecExponent[3] = 0.0f;
|
|
pShaderAPI->SetPixelShaderConstant( PSREG_EYEPOS_SPEC_EXPONENT, vEyePos_SpecExponent, 1 );
|
|
|
|
if( shaderFlags & SHADER_USE_CONSTANT_COLOR )
|
|
{
|
|
if ( bSRGB )
|
|
SetPixelShaderConstantGammaToLinear( 0, COLOR, ALPHA );
|
|
else
|
|
SetPixelShaderConstant( 0, COLOR, ALPHA );
|
|
}
|
|
|
|
if( IsHDREnabled() )
|
|
{
|
|
if ( bSRGB )
|
|
SetPixelShaderConstantGammaToLinear( 1, HDRCOLORSCALE );
|
|
else
|
|
SetPixelShaderConstant( 1, HDRCOLORSCALE );
|
|
}
|
|
}
|
|
|
|
SHADER_DRAW
|
|
{
|
|
bool bSRGB = params[NOSRGB]->GetIntValue() == 0;
|
|
|
|
SHADOW_STATE
|
|
{
|
|
pShaderShadow->EnableCulling( false );
|
|
}
|
|
|
|
switch( params[SPRITERENDERMODE]->GetIntValue() )
|
|
{
|
|
case kRenderNormal:
|
|
SHADOW_STATE
|
|
{
|
|
FogToFogColor();
|
|
|
|
SetSpriteCommonShadowState( 0 );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
SetSpriteCommonDynamicState( 0 );
|
|
}
|
|
Draw();
|
|
break;
|
|
case kRenderTransColor:
|
|
case kRenderTransTexture:
|
|
SHADOW_STATE
|
|
{
|
|
pShaderShadow->EnableDepthWrites( false );
|
|
pShaderShadow->EnableBlending( true );
|
|
pShaderShadow->BlendFunc( SHADER_BLEND_SRC_ALPHA, SHADER_BLEND_ONE_MINUS_SRC_ALPHA );
|
|
|
|
FogToFogColor();
|
|
|
|
SetSpriteCommonShadowState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
SetSpriteCommonDynamicState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
Draw();
|
|
break;
|
|
case kRenderGlow:
|
|
case kRenderWorldGlow:
|
|
SHADOW_STATE
|
|
{
|
|
pShaderShadow->EnableDepthWrites( false );
|
|
pShaderShadow->EnableDepthTest( false );
|
|
pShaderShadow->EnableBlending( true );
|
|
pShaderShadow->BlendFunc( SHADER_BLEND_SRC_ALPHA, SHADER_BLEND_ONE );
|
|
|
|
FogToBlack();
|
|
|
|
SetSpriteCommonShadowState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
SetSpriteCommonDynamicState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
Draw();
|
|
break;
|
|
case kRenderTransAlpha:
|
|
// untested cut and past from kRenderTransAlphaAdd . . same as first pass of that.
|
|
SHADOW_STATE
|
|
{
|
|
pShaderShadow->EnableDepthWrites( false );
|
|
pShaderShadow->EnableBlending( true );
|
|
pShaderShadow->BlendFunc( SHADER_BLEND_SRC_ALPHA, SHADER_BLEND_ONE_MINUS_SRC_ALPHA );
|
|
|
|
FogToFogColor();
|
|
|
|
SetSpriteCommonShadowState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
SetSpriteCommonDynamicState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
Draw();
|
|
break;
|
|
case kRenderTransAlphaAdd:
|
|
SHADOW_STATE
|
|
{
|
|
pShaderShadow->EnableDepthWrites( false );
|
|
pShaderShadow->EnableBlending( true );
|
|
pShaderShadow->BlendFunc( SHADER_BLEND_SRC_ALPHA, SHADER_BLEND_ONE_MINUS_SRC_ALPHA );
|
|
|
|
FogToFogColor();
|
|
|
|
SetSpriteCommonShadowState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
SetSpriteCommonDynamicState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
Draw();
|
|
|
|
SHADOW_STATE
|
|
{
|
|
SetInitialShadowState();
|
|
pShaderShadow->EnableDepthWrites( false );
|
|
pShaderShadow->EnableBlending( true );
|
|
pShaderShadow->BlendFunc( SHADER_BLEND_ONE_MINUS_SRC_ALPHA, SHADER_BLEND_ONE );
|
|
|
|
FogToBlack();
|
|
|
|
SetSpriteCommonShadowState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
SetSpriteCommonDynamicState( SHADER_USE_VERTEX_COLOR );
|
|
}
|
|
Draw();
|
|
break;
|
|
|
|
case kRenderTransAdd:
|
|
{
|
|
unsigned int flags = SHADER_USE_CONSTANT_COLOR;
|
|
if( !params[ IGNOREVERTEXCOLORS ]->GetIntValue() )
|
|
{
|
|
flags |= SHADER_USE_VERTEX_COLOR;
|
|
}
|
|
SHADOW_STATE
|
|
{
|
|
pShaderShadow->EnableDepthWrites( false );
|
|
pShaderShadow->EnableBlending( true );
|
|
pShaderShadow->BlendFunc( SHADER_BLEND_SRC_ALPHA, SHADER_BLEND_ONE );
|
|
|
|
FogToBlack();
|
|
|
|
SetSpriteCommonShadowState( flags );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
SetSpriteCommonDynamicState( flags );
|
|
}
|
|
}
|
|
Draw();
|
|
break;
|
|
case kRenderTransAddFrameBlend:
|
|
{
|
|
float flFrame = params[FRAME]->GetFloatValue();
|
|
float flFade = params[ALPHA]->GetFloatValue();
|
|
unsigned int flags = SHADER_USE_CONSTANT_COLOR;
|
|
if( !params[ IGNOREVERTEXCOLORS ]->GetIntValue() )
|
|
{
|
|
flags |= SHADER_USE_VERTEX_COLOR;
|
|
}
|
|
SHADOW_STATE
|
|
{
|
|
pShaderShadow->EnableDepthWrites( false );
|
|
pShaderShadow->EnableBlending( true );
|
|
pShaderShadow->BlendFunc( SHADER_BLEND_SRC_ALPHA, SHADER_BLEND_ONE );
|
|
|
|
FogToBlack();
|
|
|
|
SetSpriteCommonShadowState( flags );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
float frameBlendAlpha = 1.0f - ( flFrame - ( int )flFrame );
|
|
ITexture *pTexture = params[BASETEXTURE]->GetTextureValue();
|
|
BindTexture( SHADER_SAMPLER0, pTexture, ( int )flFrame );
|
|
|
|
MaterialFogMode_t fogType = s_pShaderAPI->GetSceneFogMode();
|
|
int fogIndex = ( fogType == MATERIAL_FOG_LINEAR_BELOW_FOG_Z ) ? 1 : 0;
|
|
DECLARE_DYNAMIC_VERTEX_SHADER( sprite_vs20 );
|
|
SET_DYNAMIC_VERTEX_SHADER_COMBO( DOWATERFOG, fogIndex );
|
|
SET_DYNAMIC_VERTEX_SHADER( sprite_vs20 );
|
|
|
|
if( g_pHardwareConfig->SupportsPixelShaders_2_b() || g_pHardwareConfig->ShouldAlwaysUseShaderModel2bShaders() ) // Always send GL down this path
|
|
{
|
|
DECLARE_DYNAMIC_PIXEL_SHADER( sprite_ps20b );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( HDRENABLED, IsHDREnabled() );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( PIXELFOGTYPE, pShaderAPI->GetPixelFogCombo() );
|
|
SET_DYNAMIC_PIXEL_SHADER( sprite_ps20b );
|
|
}
|
|
else
|
|
{
|
|
DECLARE_DYNAMIC_PIXEL_SHADER( sprite_ps20 );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( HDRENABLED, IsHDREnabled() );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( PIXELFOGTYPE, pShaderAPI->GetPixelFogCombo() );
|
|
SET_DYNAMIC_PIXEL_SHADER( sprite_ps20 );
|
|
}
|
|
|
|
pShaderAPI->SetPixelShaderFogParams( PSREG_FOG_PARAMS );
|
|
|
|
float vEyePos_SpecExponent[4];
|
|
pShaderAPI->GetWorldSpaceCameraPosition( vEyePos_SpecExponent );
|
|
vEyePos_SpecExponent[3] = 0.0f;
|
|
pShaderAPI->SetPixelShaderConstant( PSREG_EYEPOS_SPEC_EXPONENT, vEyePos_SpecExponent, 1 );
|
|
|
|
float color[4];
|
|
if ( bSRGB )
|
|
color[0] = color[1] = color[2] = GammaToLinear( flFade * frameBlendAlpha );
|
|
else
|
|
color[0] = color[1] = color[2] = flFade * frameBlendAlpha;
|
|
color[3] = 1.0f;
|
|
s_pShaderAPI->SetPixelShaderConstant( 0, color );
|
|
if( IsHDREnabled() )
|
|
{
|
|
if ( bSRGB )
|
|
SetPixelShaderConstantGammaToLinear( 1, HDRCOLORSCALE );
|
|
else
|
|
SetPixelShaderConstant( 1, HDRCOLORSCALE );
|
|
}
|
|
}
|
|
Draw();
|
|
SHADOW_STATE
|
|
{
|
|
FogToBlack();
|
|
|
|
SetSpriteCommonShadowState( flags );
|
|
}
|
|
DYNAMIC_STATE
|
|
{
|
|
float frameBlendAlpha = ( flFrame - ( int )flFrame );
|
|
ITexture *pTexture = params[BASETEXTURE]->GetTextureValue();
|
|
int numAnimationFrames = pTexture->GetNumAnimationFrames();
|
|
BindTexture( SHADER_SAMPLER0, pTexture, ( ( int )flFrame + 1 ) % numAnimationFrames );
|
|
|
|
MaterialFogMode_t fogType = s_pShaderAPI->GetSceneFogMode();
|
|
int fogIndex = ( fogType == MATERIAL_FOG_LINEAR_BELOW_FOG_Z ) ? 1 : 0;
|
|
DECLARE_DYNAMIC_VERTEX_SHADER( sprite_vs20 );
|
|
SET_DYNAMIC_VERTEX_SHADER_COMBO( DOWATERFOG, fogIndex );
|
|
SET_DYNAMIC_VERTEX_SHADER( sprite_vs20 );
|
|
|
|
if( g_pHardwareConfig->SupportsPixelShaders_2_b() || g_pHardwareConfig->ShouldAlwaysUseShaderModel2bShaders() ) // Always send GL down this path
|
|
{
|
|
DECLARE_DYNAMIC_PIXEL_SHADER( sprite_ps20b );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( HDRENABLED, IsHDREnabled() );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( PIXELFOGTYPE, pShaderAPI->GetPixelFogCombo() );
|
|
SET_DYNAMIC_PIXEL_SHADER( sprite_ps20b );
|
|
}
|
|
else
|
|
{
|
|
DECLARE_DYNAMIC_PIXEL_SHADER( sprite_ps20 );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( HDRENABLED, IsHDREnabled() );
|
|
SET_DYNAMIC_PIXEL_SHADER_COMBO( PIXELFOGTYPE, pShaderAPI->GetPixelFogCombo() );
|
|
SET_DYNAMIC_PIXEL_SHADER( sprite_ps20 );
|
|
}
|
|
|
|
pShaderAPI->SetPixelShaderFogParams( PSREG_FOG_PARAMS );
|
|
|
|
float vEyePos_SpecExponent[4];
|
|
pShaderAPI->GetWorldSpaceCameraPosition( vEyePos_SpecExponent );
|
|
vEyePos_SpecExponent[3] = 0.0f;
|
|
pShaderAPI->SetPixelShaderConstant( PSREG_EYEPOS_SPEC_EXPONENT, vEyePos_SpecExponent, 1 );
|
|
|
|
float color[4];
|
|
if ( bSRGB )
|
|
color[0] = color[1] = color[2] = GammaToLinear( flFade * frameBlendAlpha );
|
|
else
|
|
color[0] = color[1] = color[2] = flFade * frameBlendAlpha;
|
|
color[3] = 1.0f;
|
|
s_pShaderAPI->SetPixelShaderConstant( 0, color );
|
|
if( IsHDREnabled() )
|
|
{
|
|
if ( bSRGB )
|
|
SetPixelShaderConstantGammaToLinear( 1, HDRCOLORSCALE );
|
|
else
|
|
SetPixelShaderConstant( 1, HDRCOLORSCALE );
|
|
}
|
|
}
|
|
Draw();
|
|
}
|
|
|
|
break;
|
|
default:
|
|
ShaderWarning( "shader Sprite: Unknown sprite render mode\n" );
|
|
break;
|
|
}
|
|
}
|
|
END_SHADER
|