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.
88 lines
2.7 KiB
88 lines
2.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
// |
|
//=====================================================================================// |
|
|
|
#ifndef SCREENSPACEEFFECTS_H |
|
#define SCREENSPACEEFFECTS_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
class KeyValues; |
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
// Simple base class for screen space post-processing effects |
|
//------------------------------------------------------------------------------ |
|
abstract_class IScreenSpaceEffect |
|
{ |
|
public: |
|
|
|
virtual void Init( ) = 0; |
|
virtual void Shutdown( ) = 0; |
|
|
|
virtual void SetParameters( KeyValues *params ) = 0; |
|
|
|
virtual void Render( int x, int y, int w, int h ) = 0; |
|
|
|
virtual void Enable( bool bEnable ) = 0; |
|
virtual bool IsEnabled( ) = 0; |
|
}; |
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
// Interface class for managing screen space post-processing effects |
|
//------------------------------------------------------------------------------ |
|
abstract_class IScreenSpaceEffectManager |
|
{ |
|
public: |
|
|
|
virtual void InitScreenSpaceEffects( ) = 0; |
|
virtual void ShutdownScreenSpaceEffects( ) = 0; |
|
|
|
virtual IScreenSpaceEffect *GetScreenSpaceEffect( const char *pEffectName ) = 0; |
|
|
|
virtual void SetScreenSpaceEffectParams( const char *pEffectName, KeyValues *params ) = 0; |
|
virtual void SetScreenSpaceEffectParams( IScreenSpaceEffect *pEffect, KeyValues *params ) = 0; |
|
|
|
virtual void EnableScreenSpaceEffect( const char *pEffectName ) = 0; |
|
virtual void EnableScreenSpaceEffect( IScreenSpaceEffect *pEffect ) = 0; |
|
|
|
virtual void DisableScreenSpaceEffect( const char *pEffectName ) = 0; |
|
virtual void DisableScreenSpaceEffect( IScreenSpaceEffect *pEffect ) = 0; |
|
|
|
virtual void DisableAllScreenSpaceEffects( ) = 0; |
|
|
|
virtual void RenderEffects( int x, int y, int w, int h ) = 0; |
|
}; |
|
|
|
extern IScreenSpaceEffectManager *g_pScreenSpaceEffects; |
|
|
|
|
|
//------------------------------------------------------------------------------------- |
|
// Registration class for adding screen space effects to the IScreenSpaceEffectManager |
|
//------------------------------------------------------------------------------------- |
|
class CScreenSpaceEffectRegistration |
|
{ |
|
public: |
|
CScreenSpaceEffectRegistration( const char *pName, IScreenSpaceEffect *pEffect ); |
|
|
|
const char *m_pEffectName; |
|
IScreenSpaceEffect *m_pEffect; |
|
|
|
CScreenSpaceEffectRegistration *m_pNext; |
|
|
|
static CScreenSpaceEffectRegistration *s_pHead; |
|
}; |
|
|
|
#define ADD_SCREENSPACE_EFFECT( CEffect, pEffectName ) CEffect pEffectName##_effect; \ |
|
CScreenSpaceEffectRegistration pEffectName##_reg( #pEffectName, &pEffectName##_effect ); |
|
|
|
|
|
|
|
#endif |