93 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//========= 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
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
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
 | 
						|
//------------------------------------------------------------------------------
 | 
						|
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;
 | 
						|
 | 
						|
	// NEVER USE - CATHOOK
 | 
						|
	static CScreenSpaceEffectRegistration *s_pHead;
 | 
						|
};
 | 
						|
 | 
						|
// CATHOOK
 | 
						|
extern CScreenSpaceEffectRegistration** g_ppScreenSpaceRegistrationHead;
 | 
						|
 | 
						|
#define ADD_SCREENSPACE_EFFECT( CEffect, pEffectName )			CEffect pEffectName##_effect;														\
 | 
						|
																CScreenSpaceEffectRegistration pEffectName##_reg( #pEffectName, &pEffectName##_effect );	
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#endif
 |