diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/smoke_fog_overlay.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/smoke_fog_overlay.cpp')
| -rw-r--r-- | game/client/smoke_fog_overlay.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/game/client/smoke_fog_overlay.cpp b/game/client/smoke_fog_overlay.cpp new file mode 100644 index 0000000..53ac087 --- /dev/null +++ b/game/client/smoke_fog_overlay.cpp @@ -0,0 +1,111 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +#include "cbase.h" +#include "smoke_fog_overlay.h" +#include "materialsystem/imaterial.h" +#include "materialsystem/imesh.h" +#include "view.h" +#include "clienteffectprecachesystem.h" +#include "tier0/vprof.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +static IMaterial *g_pSmokeFogMaterial = NULL; + + +float g_SmokeFogOverlayAlpha; +Vector g_SmokeFogOverlayColor; + +CLIENTEFFECT_REGISTER_BEGIN( PrecacheSmokeFogOverlay ) +CLIENTEFFECT_MATERIAL( "particle/screenspace_fog" ) +CLIENTEFFECT_REGISTER_END() + +void InitSmokeFogOverlay() +{ + TermSmokeFogOverlay(); + + g_SmokeFogOverlayAlpha = 0; + + if(materials) + { + g_pSmokeFogMaterial = materials->FindMaterial( "particle/screenspace_fog", TEXTURE_GROUP_CLIENT_EFFECTS ); + if(g_pSmokeFogMaterial) + g_pSmokeFogMaterial->IncrementReferenceCount(); + } +} + + +void TermSmokeFogOverlay() +{ + if(g_pSmokeFogMaterial) + { + g_pSmokeFogMaterial->DecrementReferenceCount(); + g_pSmokeFogMaterial = NULL; + } +} + + +void DrawSmokeFogOverlay() +{ + if(g_SmokeFogOverlayAlpha == 0 || !g_pSmokeFogMaterial || !materials) + return; + + tmZone( TELEMETRY_LEVEL0, TMZF_NONE, "%s", __FUNCTION__ ); + + // Hard-coded for now.. + g_SmokeFogOverlayColor.Init( 0.3, 0.3, 0.3 ); + + CMatRenderContextPtr pRenderContext( materials ); + + pRenderContext->MatrixMode( MATERIAL_PROJECTION ); + pRenderContext->LoadIdentity(); + pRenderContext->Ortho( 0, 0, 1, 1, -99999, 99999 ); + + pRenderContext->MatrixMode( MATERIAL_VIEW ); + pRenderContext->LoadIdentity(); + + pRenderContext->MatrixMode( MATERIAL_MODEL ); + pRenderContext->LoadIdentity(); + + IMesh* pMesh = pRenderContext->GetDynamicMesh( false, NULL, NULL, g_pSmokeFogMaterial ); + CMeshBuilder meshBuilder; + + static float dist = 10; + + Vector vColor = g_SmokeFogOverlayColor; + vColor.x = MIN(MAX(vColor.x, 0), 1); + vColor.y = MIN(MAX(vColor.y, 0), 1); + vColor.z = MIN(MAX(vColor.z, 0), 1); + float alpha = MIN(MAX(g_SmokeFogOverlayAlpha, 0), 1); + + meshBuilder.Begin( pMesh, MATERIAL_QUADS, 1 ); + + meshBuilder.Position3f( 0, 0, dist ); + meshBuilder.Color4f( vColor.x, vColor.y, vColor.z, alpha ); + meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3f( 0, 1, dist ); + meshBuilder.Color4f( vColor.x, vColor.y, vColor.z, alpha ); + meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3f( 1, 1, dist ); + meshBuilder.Color4f( vColor.x, vColor.y, vColor.z, alpha ); + meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); + meshBuilder.AdvanceVertex(); + + meshBuilder.Position3f( 1, 0, dist ); + meshBuilder.Color4f( vColor.x, vColor.y, vColor.z, alpha ); + meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); + meshBuilder.AdvanceVertex(); + + meshBuilder.End(); + pMesh->Draw(); +} |