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.
 
 
 
 
 
 

132 lines
6.6 KiB

//========= Copyright © Valve Corporation, All rights reserved. ============//
//
// Purpose: Shader for compositing weapon textures
//
//==========================================================================//
#include "BaseVSShader.h"
#include "customweapon_dx9_helper.h"
#include "cpp_shader_constant_register_map.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
DEFINE_FALLBACK_SHADER( CustomWeapon, CustomWeapon_dx9 )
BEGIN_VS_SHADER( CustomWeapon_dx9, "CustomWeapon" )
BEGIN_SHADER_PARAMS
SHADER_PARAM( SURFACETEXTURE, SHADER_PARAM_TYPE_TEXTURE, "shader/SurfaceTexture", "RGB: Object-space normal, A: Cavity" )
SHADER_PARAM( AOTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "shader/AOTexture", "RGB: Ambient Occlusion" )
SHADER_PARAM( MASKSTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "shader/MasksTexture", "R: Anodized, G: Camo2, B: Camo3, A: Black is paintable, White reveals original basetexture" )
SHADER_PARAM( POSTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "shader/PosTexture", "RGB: High-precision object-space position" )
SHADER_PARAM( GRUNGETEXTURE, SHADER_PARAM_TYPE_TEXTURE, "shader/PosTexture", "RGB: Tiling grunge A: spec, black dulls the paint finish" )
SHADER_PARAM( WEARTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "shader/PosTexture", "RGB: Greyscale wear speed factor, white wears soonest" )
SHADER_PARAM( PAINTTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "shader/PosTexture", "RGB: High-precision object-space position" )
SHADER_PARAM( EXPTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "shader/PosTexture", "RGB: Exponent texture" )
SHADER_PARAM( CAMOCOLOR0, SHADER_PARAM_TYPE_VEC3, "[ 0 0 0 ]", "Customization color 0" )
SHADER_PARAM( CAMOCOLOR1, SHADER_PARAM_TYPE_VEC3, "[ 0 0 0 ]", "Customization color 1" )
SHADER_PARAM( CAMOCOLOR2, SHADER_PARAM_TYPE_VEC3, "[ 0 0 0 ]", "Customization color 2" )
SHADER_PARAM( CAMOCOLOR3, SHADER_PARAM_TYPE_VEC3, "[ 0 0 0 ]", "Customization color 3" )
SHADER_PARAM( BASEDIFFUSEOVERRIDE, SHADER_PARAM_TYPE_INTEGER, "0", "Set if this customization style needs a different (non-default) underlying diffuse map for this weapon" )
SHADER_PARAM( PHONGEXPONENT, SHADER_PARAM_TYPE_INTEGER, "4", "Phong exponent value" )
SHADER_PARAM( WEARPROGRESS, SHADER_PARAM_TYPE_FLOAT, "0.45", "Wear/worn progress amount" )
SHADER_PARAM( PHONGALBEDOBOOST, SHADER_PARAM_TYPE_FLOAT, "1", "Phong albedo boost value for anodized metallic effect" )
SHADER_PARAM( PHONGINTENSITY, SHADER_PARAM_TYPE_INTEGER, "10", "Phong intensity value" )
SHADER_PARAM( PAINTSTYLE, SHADER_PARAM_TYPE_INTEGER, "0", "Indicates a specific customization style: 0 = none, 1 = solid, 2 = hydrographic, 3 = spray, 4 = anodized, 5 = anodized multicolored, 6 = anodized airbrushed, 7 = custom texture, 8 = patina/antiqued" )
SHADER_PARAM( EXPONENTMODE, SHADER_PARAM_TYPE_INTEGER, "0", "Set to 1 to an exponent texture for the given style rather than a base diffuse" )
SHADER_PARAM( PATTERNTEXTURETRANSFORM, SHADER_PARAM_TYPE_MATRIX, "center .5 .5 scale 1 1 rotate 0 translate 0 0", "$PAINTTEXTURE texcoord transform" )
SHADER_PARAM( WEARTEXTURETRANSFORM, SHADER_PARAM_TYPE_MATRIX, "center .5 .5 scale 1 1 rotate 0 translate 0 0", "$WEARTEXTURE texcoord transform" )
SHADER_PARAM( GRUNGETEXTURETRANSFORM, SHADER_PARAM_TYPE_MATRIX, "center .5 .5 scale 1 1 rotate 0 translate 0 0", "$GRUNGETEXTURE texcoord transform" )
SHADER_PARAM( CHEAPMODE, SHADER_PARAM_TYPE_BOOL, "", "Cheap mode for low-spec hardware. Disables certain nice-but-not-fundamentally-vital features such as super-sampling the HDR precision" )
SHADER_PARAM( PHONGALBEDOFACTOR, SHADER_PARAM_TYPE_FLOAT, "1.0", "When using the anodizing mode, some specular values already affected by phongalbedo in the source need to be reduced to compensate for increase in phongalbedoboost")
SHADER_PARAM( PREVIEW, SHADER_PARAM_TYPE_BOOL, "0", "Enable to preview the shader, realtime, on a model" )
SHADER_PARAM( PHONGFRESNELRANGES, SHADER_PARAM_TYPE_VEC3, "[ .25 .5 1 ]", "Phong fresnel ranges for preview render" )
SHADER_PARAM( PHONGALBEDOTINT, SHADER_PARAM_TYPE_BOOL, "0", "Enable phong albedo tint for preview render" )
SHADER_PARAM( PHONGBOOST, SHADER_PARAM_TYPE_FLOAT, "1.0", "Phong boost for preview render" )
SHADER_PARAM( PAINTPHONGALBEDOBOOST, SHADER_PARAM_TYPE_FLOAT, "1.0", "Phong albedo boost for preview render" )
SHADER_PARAM( PREVIEWWEAPONOBJSCALE, SHADER_PARAM_TYPE_FLOAT, "1.0", "Weapon-specific scale factor for patterns applied via object space projections" )
SHADER_PARAM( PREVIEWWEAPONUVSCALE, SHADER_PARAM_TYPE_FLOAT, "1.0", "Weapon-specific scale factor for patterns applied via UVs" )
SHADER_PARAM( PREVIEWIGNOREWEAPONSCALE, SHADER_PARAM_TYPE_BOOL, "0", "Paint-specific toggle for ignoring weapon-specific scales" )
END_SHADER_PARAMS
void SetupVarsCustomWeapon( CustomWeaponVars_t &info )
{
info.m_nBaseTexture = BASETEXTURE;
info.m_nBaseTextureTransform = BASETEXTURETRANSFORM;
info.m_nSurfaceTexture = SURFACETEXTURE;
info.m_nAOTexture = AOTEXTURE;
info.m_nMasksTexture = MASKSTEXTURE;
info.m_nPosTexture = POSTEXTURE;
info.m_nGrungeTexture = GRUNGETEXTURE;
info.m_nWearTexture = WEARTEXTURE;
info.m_nPaintTexture = PAINTTEXTURE;
info.m_nExpTexture = EXPTEXTURE;
info.m_nCamoColor0 = CAMOCOLOR0;
info.m_nCamoColor1 = CAMOCOLOR1;
info.m_nCamoColor2 = CAMOCOLOR2;
info.m_nCamoColor3 = CAMOCOLOR3;
info.m_nBaseDiffuseOverride = BASEDIFFUSEOVERRIDE;
info.m_nPhongExponent = PHONGEXPONENT;
info.m_nPhongIntensity = PHONGINTENSITY;
info.m_nWearProgress = WEARPROGRESS;
info.m_nPaintStyle = PAINTSTYLE;
info.m_nExponentMode = EXPONENTMODE;
info.m_nPatternTextureTransform = PATTERNTEXTURETRANSFORM;
info.m_nWearTextureTransform = WEARTEXTURETRANSFORM;
info.m_nGrungeTextureTransform = GRUNGETEXTURETRANSFORM;
info.m_nCheap = CHEAPMODE;
info.m_nPhongAlbedoFactor = PHONGALBEDOFACTOR;
info.m_nPreview = PREVIEW;
info.m_nPreviewPhongFresnelRanges = PHONGFRESNELRANGES;
info.m_nPreviewPhongAlbedoTint = PHONGALBEDOTINT;
info.m_nPreviewPhongBoost = PHONGBOOST;
info.m_nPhongAlbedoBoost = PHONGALBEDOBOOST;
info.m_nPreviewPaintPhongAlbedoBoost = PAINTPHONGALBEDOBOOST;
info.m_nPreviewWeaponObjScale = PREVIEWWEAPONOBJSCALE;
info.m_nPreviewWeaponUVScale = PREVIEWWEAPONUVSCALE;
info.m_nPreviewIgnoreWeaponScale = PREVIEWIGNOREWEAPONSCALE;
}
SHADER_INIT_PARAMS()
{
CustomWeaponVars_t info;
SetupVarsCustomWeapon( info );
InitParamsCustomWeapon( this, params, pMaterialName, info );
}
SHADER_FALLBACK
{
return 0;
}
SHADER_INIT
{
CustomWeaponVars_t info;
SetupVarsCustomWeapon( info );
InitCustomWeapon( this, params, info );
}
SHADER_DRAW
{
CustomWeaponVars_t info;
SetupVarsCustomWeapon( info );
DrawCustomWeapon( this, params, pShaderAPI, pShaderShadow, info, vertexCompression, pContextDataPtr );
}
END_SHADER