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
5 years ago
|
//========= 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
|