This repository has been archived on 2024-06-01. You can view files and clone it, but cannot push or open issues or pull requests.
cathook/include/sdk/ScreenSpaceEffects.h
2017-12-02 17:47:47 +03:00

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