Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//===================== Copyright (c) Valve Corporation. All Rights Reserved. ======================
// STATIC: "HASALPHAMASK" "0..1" // STATIC: "HASSTATICTEXTURE" "0..1" // STATIC: "PORTALGHOSTOVERLAY" "0..1"
#include "common_fog_ps_fxc.h"
#include "common_ps_fxc.h" #include "shader_constant_register_map.h"
#if defined( _X360 ) #undef SHADER_SRGB_READ #define SHADER_SRGB_READ 1 #endif
const float3 g_StaticAmount : register( c0 ); //x is static, y is 1.0 - static
const float4 g_FogParams : register( PSREG_FOG_PARAMS ); const float4 g_EyePos_SpecExponent : register( PSREG_EYEPOS_SPEC_EXPONENT );
#if ( HASSTATICTEXTURE ) sampler StaticTextureSampler : register( s0 ); #if ( HASALPHAMASK ) sampler AlphaMaskSampler : register( s1 ); #endif #else #if ( HASALPHAMASK ) sampler AlphaMaskSampler : register( s0 ); #endif #endif
struct PS_INPUT { float4 vProjPos : POSITION; float4 vVertexColor : COLOR;
//vStaticTexCoord and vAlphaMaskTexCoord are the same numbers, but we need to map TEXCOORD0 to sampler 0, and TEXCOORD1 to sampler1. ps11 compatibility issue #if ( HASSTATICTEXTURE ) float2 vStaticTexCoord : TEXCOORD0; #if ( HASALPHAMASK ) float2 vAlphaMaskTexCoord : TEXCOORD1; #endif #else #if ( HASALPHAMASK ) float2 vAlphaMaskTexCoord : TEXCOORD0; #else float2 vUnusedTexCoord1 : TEXCOORD0; #endif float2 vUnusedTexCoord2 : TEXCOORD1; #endif
float4 worldPos_projPosZ : TEXCOORD7; // Necessary for pixel fog };
float4_color_return_type main( PS_INPUT i ) : COLOR { float4 result;
#if ( HASSTATICTEXTURE ) { result.rgba = tex2Dsrgb( StaticTextureSampler, i.vStaticTexCoord ); } #else { result.rgba = 0.25; // Without a static texture, just be gray } #endif
#if ( PORTALGHOSTOVERLAY ) { result.rgb *= i.vVertexColor.rgb; result.rgb *= i.vVertexColor.a * g_StaticAmount.x; // Doing a one/invSrcAlpha blend so dim color here
result.a *= i.vVertexColor.a;
// Limit tonemap scalar to 0.0-1.0 so the colors don't oversaturate, but let it drop down to 0 to allow fading float flTonemapScalar = saturate( LINEAR_LIGHT_SCALE ); return FinalOutput( result, 0.0f, PIXEL_FOG_TYPE_NONE, TONEMAP_SCALE_NONE ) * flTonemapScalar; } #else { #if ( HASALPHAMASK ) { result.a = min( g_StaticAmount.x, tex2D( AlphaMaskSampler, i.vAlphaMaskTexCoord ).a ); // When static reaches 0, fades away completely, also never exceeds the mask's alpha } #else { result.a = g_StaticAmount.x; // When static reaches 0, fades away completely } #endif
float fogFactor = CalcPixelFogFactor( PIXELFOGTYPE, g_FogParams, g_EyePos_SpecExponent.xyz, i.worldPos_projPosZ.xyz, i.worldPos_projPosZ.w ); return FinalOutput( result, fogFactor, PIXELFOGTYPE, TONEMAP_SCALE_LINEAR ); } #endif }
|