93 lines
3.0 KiB
C++
93 lines
3.0 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
|