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/glow_overlay.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/glow_overlay.h')
| -rw-r--r-- | game/client/glow_overlay.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/game/client/glow_overlay.h b/game/client/glow_overlay.h new file mode 100644 index 0000000..14de906 --- /dev/null +++ b/game/client/glow_overlay.h @@ -0,0 +1,129 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef GLOW_OVERLAY_H +#define GLOW_OVERLAY_H +#ifdef _WIN32 +#pragma once +#endif + +#include "mathlib/vector.h" +#include "materialsystem/imaterial.h" +#include "sun_shared.h" +#include "c_pixel_visibility.h" + +#ifdef PORTAL +#include "c_prop_portal.h" //MAX_PORTAL_RECURSIVE_VIEWS +#endif + +extern float g_flOverlayRange; + +class CGlowSprite +{ +public: + Vector m_vColor; // 0-1 + float m_flHorzSize; // Horizontal and vertical sizes. + float m_flVertSize; // 1 = size of the sun + IMaterial *m_pMaterial; // Material to use +}; + + +class CGlowOverlay +{ +public: + + CGlowOverlay(); + virtual ~CGlowOverlay(); + + // Return false to remove (and delete) the overlay. + virtual bool Update(); + + +// Data the creator should fill in. +public: + + // Position of the light source. If m_bDirectional is set, then it ignores + // this and uses m_vDirection as the direction of the light source. + Vector m_vPos; + + // Optional direction. Used for really far away things like the sun. + // The direction should point AT the light source. + bool m_bDirectional; + Vector m_vDirection; + + // If this is set, then the overlay is only visible if the ray to it hits the sky. + bool m_bInSky; + float m_skyObstructionScale; +#ifdef PORTAL + float m_skyObstructionScaleBackups[MAX_PORTAL_RECURSIVE_VIEWS]; //used in portal mod during stencil rendering to maintain obstructions while rendering recursive views +#endif + + CGlowSprite m_Sprites[MAX_SUN_LAYERS]; + int m_nSprites; + + float m_flProxyRadius; + + float m_flHDRColorScale; + +public: + + // After creating the overlay, call this to add it to the active list. + // You can also call Activate and Deactivate as many times as you want. + void Activate(); + void Deactivate(); + + // Render all the active overlays. + static void DrawOverlays( bool bCacheFullSceneState ); + static void UpdateSkyOverlays( float zFar, bool bCacheFullSceneState ); + +#ifdef PORTAL + static void BackupSkyOverlayData( int iBackupToSlot ); + static void RestoreSkyOverlayData( int iRestoreFromSlot ); +#endif + +protected: + + void UpdateGlowObstruction( const Vector &vToGlow, bool bCacheFullSceneState ); + void UpdateSkyGlowObstruction( float zFar, bool bCacheFullSceneState ); + + virtual void CalcSpriteColorAndSize( + float flDot, + CGlowSprite *pSprite, + float *flHorzSize, + float *flVertSize, + Vector *vColor ); + + virtual void CalcBasis( + const Vector &vToGlow, + float flHorzSize, + float flVertSize, + Vector &vBasePt, + Vector &vUp, + Vector &vRight ); + + virtual void Draw( bool bCacheFullSceneState ); + float CalcGlowAspect(); + + float m_flGlowObstructionScale; + bool m_bCacheGlowObstruction; // Flags to cache obstruction scales + bool m_bCacheSkyObstruction; // Used in IFM poster rendering + +private: + short m_bActivated; + unsigned short m_ListIndex; // index into s_GlowOverlays. + pixelvis_handle_t m_queryHandle; +}; + +//Override for warping +class CWarpOverlay : public CGlowOverlay +{ +protected: + + virtual void Draw( bool bCacheFullSceneState ); +}; + +#endif // GLOW_OVERLAY_H |