mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 20:16:10 +08:00
SDK sync.
This commit is contained in:
206
materialsystem/stdshaders/worldvertextransition_dx6_helper.cpp
Normal file
206
materialsystem/stdshaders/worldvertextransition_dx6_helper.cpp
Normal file
@ -0,0 +1,206 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================
|
||||
|
||||
#include "shaderlib/cshader.h"
|
||||
#include "worldvertextransition_dx6_helper.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
|
||||
void InitParamsWorldVertexTransition_DX6( IMaterialVar** params, WorldVertexTransition_DX6_Vars_t &info )
|
||||
{
|
||||
SET_FLAGS2( MATERIAL_VAR2_LIGHTING_LIGHTMAP );
|
||||
// FLASHLIGHTFIXME
|
||||
params[info.m_nFlashlightTextureVar]->SetStringValue( "effects/flashlight001" );
|
||||
}
|
||||
|
||||
void InitWorldVertexTransition_DX6( CBaseShader *pShader, IMaterialVar** params, WorldVertexTransition_DX6_Vars_t &info )
|
||||
{
|
||||
// FLASHLIGHTFIXME
|
||||
if ( params[info.m_nFlashlightTextureVar]->IsDefined() )
|
||||
{
|
||||
pShader->LoadTexture( info.m_nFlashlightTextureVar );
|
||||
}
|
||||
|
||||
if ( params[info.m_nBaseTextureVar]->IsDefined() )
|
||||
{
|
||||
pShader->LoadTexture( info.m_nBaseTextureVar );
|
||||
}
|
||||
|
||||
if ( params[info.m_nBaseTexture2Var]->IsDefined() )
|
||||
{
|
||||
pShader->LoadTexture( info.m_nBaseTexture2Var );
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawFlashlightPass( CBaseShader *pShader, IMaterialVar** params, IShaderDynamicAPI *pShaderAPI, IShaderShadow* pShaderShadow, int nPass, WorldVertexTransition_DX6_Vars_t &info )
|
||||
{
|
||||
SHADOW_STATE
|
||||
{
|
||||
SET_FLAGS2( MATERIAL_VAR2_NEEDS_FIXED_FUNCTION_FLASHLIGHT );
|
||||
pShaderShadow->EnableDepthWrites( false );
|
||||
pShaderShadow->EnableAlphaWrites( false );
|
||||
|
||||
pShaderShadow->SetDiffuseMaterialSource( SHADER_MATERIALSOURCE_COLOR1 );
|
||||
if( nPass == 0 )
|
||||
{
|
||||
pShader->EnableAlphaBlending( SHADER_BLEND_SRC_ALPHA, SHADER_BLEND_ONE );
|
||||
}
|
||||
else
|
||||
{
|
||||
pShader->EnableAlphaBlending( SHADER_BLEND_ONE_MINUS_SRC_ALPHA, SHADER_BLEND_ONE );
|
||||
}
|
||||
|
||||
int flags = SHADER_DRAW_POSITION | SHADER_DRAW_TEXCOORD1 | SHADER_DRAW_COLOR | SHADER_DRAW_NORMAL;
|
||||
pShaderShadow->DrawFlags( flags );
|
||||
pShader->FogToBlack();
|
||||
|
||||
pShaderShadow->EnableLighting( true );
|
||||
|
||||
pShaderShadow->EnableCustomPixelPipe( true );
|
||||
pShaderShadow->CustomTextureStages( 2 );
|
||||
|
||||
// color stage 0
|
||||
// projected texture * vertex color (lighting)
|
||||
pShaderShadow->CustomTextureOperation( SHADER_TEXTURE_STAGE0,
|
||||
SHADER_TEXCHANNEL_COLOR,
|
||||
SHADER_TEXOP_MODULATE,
|
||||
SHADER_TEXARG_TEXTURE,
|
||||
SHADER_TEXARG_VERTEXCOLOR );
|
||||
|
||||
// color stage 1
|
||||
// * base texture
|
||||
pShaderShadow->CustomTextureOperation( SHADER_TEXTURE_STAGE1,
|
||||
SHADER_TEXCHANNEL_COLOR,
|
||||
SHADER_TEXOP_MODULATE,
|
||||
SHADER_TEXARG_TEXTURE, SHADER_TEXARG_PREVIOUSSTAGE );
|
||||
|
||||
// alpha stage 0
|
||||
// get alpha from constant alpha * vertex color
|
||||
pShaderShadow->CustomTextureOperation( SHADER_TEXTURE_STAGE0,
|
||||
SHADER_TEXCHANNEL_ALPHA,
|
||||
SHADER_TEXOP_MODULATE,
|
||||
SHADER_TEXARG_CONSTANTCOLOR, SHADER_TEXARG_VERTEXCOLOR );
|
||||
|
||||
// alpha stage 1
|
||||
// get alpha from $basetexture
|
||||
pShaderShadow->CustomTextureOperation( SHADER_TEXTURE_STAGE1,
|
||||
SHADER_TEXCHANNEL_ALPHA,
|
||||
SHADER_TEXOP_MODULATE,
|
||||
SHADER_TEXARG_TEXTURE, SHADER_TEXARG_PREVIOUSSTAGE );
|
||||
|
||||
pShaderShadow->EnableTexture( SHADER_SAMPLER0, true );
|
||||
pShaderShadow->EnableTexture( SHADER_SAMPLER1, true );
|
||||
|
||||
// Shove the view position into texcoord 0 before the texture matrix.
|
||||
pShaderShadow->TexGen( SHADER_TEXTURE_STAGE0, SHADER_TEXGENPARAM_EYE_LINEAR );
|
||||
pShaderShadow->EnableTexGen( SHADER_TEXTURE_STAGE0, true );
|
||||
}
|
||||
DYNAMIC_STATE
|
||||
{
|
||||
pShader->SetFlashlightFixedFunctionTextureTransform( MATERIAL_TEXTURE0 );
|
||||
|
||||
// NOTE: This has to come after the loadmatrix since the loadmatrix screws with the
|
||||
// transform flags!!!!!!
|
||||
// Specify that we have XYZ texcoords that need to be divided by W before the pixel shader.
|
||||
// NOTE Tried to divide XY by Z, but doesn't work.
|
||||
pShaderAPI->SetTextureTransformDimension( SHADER_TEXTURE_STAGE0, 3, true );
|
||||
|
||||
pShader->BindTexture( SHADER_SAMPLER0, FLASHLIGHTTEXTURE, FLASHLIGHTTEXTUREFRAME );
|
||||
if( nPass == 0 )
|
||||
{
|
||||
pShader->BindTexture( SHADER_SAMPLER1, info.m_nBaseTexture2Var, -1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
pShader->BindTexture( SHADER_SAMPLER1, info.m_nBaseTextureVar, info.m_nBaseTextureFrameVar );
|
||||
}
|
||||
}
|
||||
pShader->Draw();
|
||||
}
|
||||
|
||||
|
||||
void DrawWorldVertexTransition_DX6( CBaseShader *pShader, IMaterialVar** params, IShaderDynamicAPI *pShaderAPI, IShaderShadow* pShaderShadow, WorldVertexTransition_DX6_Vars_t &info )
|
||||
{
|
||||
bool bHasFlashlight = pShader->UsingFlashlight( params );
|
||||
if( bHasFlashlight )
|
||||
{
|
||||
DrawFlashlightPass( pShader, params, pShaderAPI, pShaderShadow, 0, info );
|
||||
DrawFlashlightPass( pShader, params, pShaderAPI, pShaderShadow, 1, info );
|
||||
return;
|
||||
}
|
||||
|
||||
SHADOW_STATE
|
||||
{
|
||||
SET_FLAGS2( MATERIAL_VAR2_LIGHTING_LIGHTMAP );
|
||||
pShaderShadow->EnableTexture( SHADER_SAMPLER0, true );
|
||||
pShaderShadow->EnableTexture( SHADER_SAMPLER1, true );
|
||||
pShaderShadow->OverbrightValue( SHADER_TEXTURE_STAGE1, OVERBRIGHT );
|
||||
|
||||
pShaderShadow->DrawFlags( SHADER_DRAW_COLOR | SHADER_DRAW_POSITION | SHADER_DRAW_TEXCOORD1 | SHADER_DRAW_LIGHTMAP_TEXCOORD0 );
|
||||
pShader->FogToFogColor();
|
||||
}
|
||||
DYNAMIC_STATE
|
||||
{
|
||||
//pShaderAPI->TexMinFilter( SHADER_TEXFILTERMODE_NEAREST );
|
||||
//pShaderAPI->TexMagFilter( SHADER_TEXFILTERMODE_NEAREST );
|
||||
pShader->BindTexture( SHADER_SAMPLER1, info.m_nBaseTextureVar );
|
||||
pShaderAPI->BindStandardTexture( SHADER_SAMPLER0, TEXTURE_LIGHTMAP );
|
||||
}
|
||||
pShader->Draw();
|
||||
|
||||
SHADOW_STATE
|
||||
{
|
||||
SET_FLAGS2( MATERIAL_VAR2_LIGHTING_LIGHTMAP );
|
||||
pShaderShadow->EnableTexture( SHADER_SAMPLER0, true );
|
||||
pShaderShadow->EnableTexture( SHADER_SAMPLER1, true );
|
||||
pShaderShadow->EnableBlending( true );
|
||||
|
||||
pShaderShadow->EnableCustomPixelPipe( true );
|
||||
pShaderShadow->CustomTextureStages( 2 );
|
||||
|
||||
// alpha and color stage 0
|
||||
pShaderShadow->CustomTextureOperation( SHADER_TEXTURE_STAGE0,
|
||||
SHADER_TEXCHANNEL_ALPHA,
|
||||
SHADER_TEXOP_SELECTARG1,
|
||||
SHADER_TEXARG_TEXTURE,
|
||||
SHADER_TEXARG_TEXTURE );
|
||||
|
||||
pShaderShadow->CustomTextureOperation( SHADER_TEXTURE_STAGE0,
|
||||
SHADER_TEXCHANNEL_COLOR,
|
||||
SHADER_TEXOP_SELECTARG1,
|
||||
SHADER_TEXARG_TEXTURE,
|
||||
SHADER_TEXARG_TEXTURE );
|
||||
|
||||
// alpha and color stage 1
|
||||
pShaderShadow->CustomTextureOperation( SHADER_TEXTURE_STAGE1,
|
||||
SHADER_TEXCHANNEL_ALPHA,
|
||||
SHADER_TEXOP_MODULATE,
|
||||
SHADER_TEXARG_TEXTURE,
|
||||
SHADER_TEXARG_VERTEXCOLOR );
|
||||
|
||||
pShaderShadow->CustomTextureOperation( SHADER_TEXTURE_STAGE1,
|
||||
SHADER_TEXCHANNEL_COLOR,
|
||||
SHADER_TEXOP_MODULATE2X,
|
||||
SHADER_TEXARG_PREVIOUSSTAGE,
|
||||
SHADER_TEXARG_TEXTURE );
|
||||
|
||||
// Looks backwards, but this is done so that lightmap alpha = 1 when only
|
||||
// using 1 texture (needed for translucent displacements).
|
||||
pShaderShadow->BlendFunc( SHADER_BLEND_SRC_ALPHA, SHADER_BLEND_ONE_MINUS_SRC_ALPHA );
|
||||
|
||||
pShaderShadow->DrawFlags( SHADER_DRAW_COLOR | SHADER_DRAW_POSITION | SHADER_DRAW_TEXCOORD1 | SHADER_DRAW_LIGHTMAP_TEXCOORD0 );
|
||||
pShader->FogToFogColor();
|
||||
}
|
||||
DYNAMIC_STATE
|
||||
{
|
||||
pShader->BindTexture( SHADER_SAMPLER1, info.m_nBaseTexture2Var );
|
||||
pShaderAPI->BindStandardTexture( SHADER_SAMPLER0, TEXTURE_LIGHTMAP );
|
||||
}
|
||||
pShader->Draw();
|
||||
}
|
Reference in New Issue
Block a user