aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/ScreenSpaceEffects.h
blob: a93fa2297c2ed9221f000c375904e0ef0d4a7919 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//========= 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