Team Fortress 2 Source Code as on 22/4/2020
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.

111 lines
2.8 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //
  7. //=============================================================================//
  8. #include "cbase.h"
  9. #include "smoke_fog_overlay.h"
  10. #include "materialsystem/imaterial.h"
  11. #include "materialsystem/imesh.h"
  12. #include "view.h"
  13. #include "clienteffectprecachesystem.h"
  14. #include "tier0/vprof.h"
  15. // memdbgon must be the last include file in a .cpp file!!!
  16. #include "tier0/memdbgon.h"
  17. static IMaterial *g_pSmokeFogMaterial = NULL;
  18. float g_SmokeFogOverlayAlpha;
  19. Vector g_SmokeFogOverlayColor;
  20. CLIENTEFFECT_REGISTER_BEGIN( PrecacheSmokeFogOverlay )
  21. CLIENTEFFECT_MATERIAL( "particle/screenspace_fog" )
  22. CLIENTEFFECT_REGISTER_END()
  23. void InitSmokeFogOverlay()
  24. {
  25. TermSmokeFogOverlay();
  26. g_SmokeFogOverlayAlpha = 0;
  27. if(materials)
  28. {
  29. g_pSmokeFogMaterial = materials->FindMaterial( "particle/screenspace_fog", TEXTURE_GROUP_CLIENT_EFFECTS );
  30. if(g_pSmokeFogMaterial)
  31. g_pSmokeFogMaterial->IncrementReferenceCount();
  32. }
  33. }
  34. void TermSmokeFogOverlay()
  35. {
  36. if(g_pSmokeFogMaterial)
  37. {
  38. g_pSmokeFogMaterial->DecrementReferenceCount();
  39. g_pSmokeFogMaterial = NULL;
  40. }
  41. }
  42. void DrawSmokeFogOverlay()
  43. {
  44. if(g_SmokeFogOverlayAlpha == 0 || !g_pSmokeFogMaterial || !materials)
  45. return;
  46. tmZone( TELEMETRY_LEVEL0, TMZF_NONE, "%s", __FUNCTION__ );
  47. // Hard-coded for now..
  48. g_SmokeFogOverlayColor.Init( 0.3, 0.3, 0.3 );
  49. CMatRenderContextPtr pRenderContext( materials );
  50. pRenderContext->MatrixMode( MATERIAL_PROJECTION );
  51. pRenderContext->LoadIdentity();
  52. pRenderContext->Ortho( 0, 0, 1, 1, -99999, 99999 );
  53. pRenderContext->MatrixMode( MATERIAL_VIEW );
  54. pRenderContext->LoadIdentity();
  55. pRenderContext->MatrixMode( MATERIAL_MODEL );
  56. pRenderContext->LoadIdentity();
  57. IMesh* pMesh = pRenderContext->GetDynamicMesh( false, NULL, NULL, g_pSmokeFogMaterial );
  58. CMeshBuilder meshBuilder;
  59. static float dist = 10;
  60. Vector vColor = g_SmokeFogOverlayColor;
  61. vColor.x = MIN(MAX(vColor.x, 0), 1);
  62. vColor.y = MIN(MAX(vColor.y, 0), 1);
  63. vColor.z = MIN(MAX(vColor.z, 0), 1);
  64. float alpha = MIN(MAX(g_SmokeFogOverlayAlpha, 0), 1);
  65. meshBuilder.Begin( pMesh, MATERIAL_QUADS, 1 );
  66. meshBuilder.Position3f( 0, 0, dist );
  67. meshBuilder.Color4f( vColor.x, vColor.y, vColor.z, alpha );
  68. meshBuilder.TexCoord2f( 0, 0.0f, 0.0f );
  69. meshBuilder.AdvanceVertex();
  70. meshBuilder.Position3f( 0, 1, dist );
  71. meshBuilder.Color4f( vColor.x, vColor.y, vColor.z, alpha );
  72. meshBuilder.TexCoord2f( 0, 0.0f, 0.0f );
  73. meshBuilder.AdvanceVertex();
  74. meshBuilder.Position3f( 1, 1, dist );
  75. meshBuilder.Color4f( vColor.x, vColor.y, vColor.z, alpha );
  76. meshBuilder.TexCoord2f( 0, 0.0f, 0.0f );
  77. meshBuilder.AdvanceVertex();
  78. meshBuilder.Position3f( 1, 0, dist );
  79. meshBuilder.Color4f( vColor.x, vColor.y, vColor.z, alpha );
  80. meshBuilder.TexCoord2f( 0, 0.0f, 0.0f );
  81. meshBuilder.AdvanceVertex();
  82. meshBuilder.End();
  83. pMesh->Draw();
  84. }