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.
129 lines
3.1 KiB
129 lines
3.1 KiB
//========= 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
|
|
|