This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
nekohook/modules/source2013/sdk/game/client/iclientshadowmgr.h
2020-08-04 13:13:01 -04:00

122 lines
4.9 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
#ifndef ICLIENTSHADOWMGR_H
#define ICLIENTSHADOWMGR_H
#ifdef _WIN32
#pragma once
#endif
#include "../../public/engine/ishadowmgr.h"
#include "../../public/ivrenderview.h"
#include "../../public/toolframework/itoolentity.h"
#include "../shared/igamesystem.h"
#include "icliententityinternal.h"
//-----------------------------------------------------------------------------
// Forward decls
//-----------------------------------------------------------------------------
struct FlashlightState_t;
//-----------------------------------------------------------------------------
// Handles to a client shadow
//-----------------------------------------------------------------------------
enum ShadowReceiver_t {
SHADOW_RECEIVER_BRUSH_MODEL = 0,
SHADOW_RECEIVER_STATIC_PROP,
SHADOW_RECEIVER_STUDIO_MODEL,
};
//-----------------------------------------------------------------------------
// The class responsible for dealing with shadows on the client side
//-----------------------------------------------------------------------------
abstract_class IClientShadowMgr : public IGameSystemPerFrame {
public:
// Create, destroy shadows
virtual ClientShadowHandle_t CreateShadow(ClientEntityHandle_t entity,
int flags) = 0;
virtual void DestroyShadow(ClientShadowHandle_t handle) = 0;
// Create flashlight.
// FLASHLIGHTFIXME: need to rename all of the shadow stuff to
// projectedtexture and have flashlights and shadows as instances.
virtual ClientShadowHandle_t CreateFlashlight(
const FlashlightState_t &lightState) = 0;
virtual void UpdateFlashlightState(ClientShadowHandle_t shadowHandle,
const FlashlightState_t &lightState) = 0;
virtual void DestroyFlashlight(ClientShadowHandle_t handle) = 0;
// Indicate that the shadow should be recomputed due to a change in
// the client entity
virtual void UpdateProjectedTexture(ClientShadowHandle_t handle,
bool force = false) = 0;
// Used to cause shadows to be re-projected against the world.
virtual void AddToDirtyShadowList(ClientShadowHandle_t handle,
bool force = false) = 0;
virtual void AddToDirtyShadowList(IClientRenderable * pRenderable,
bool force = false) = 0;
// deals with shadows being added to shadow receivers
virtual void AddShadowToReceiver(ClientShadowHandle_t handle,
IClientRenderable * pRenderable,
ShadowReceiver_t type) = 0;
virtual void RemoveAllShadowsFromReceiver(IClientRenderable * pRenderable,
ShadowReceiver_t type) = 0;
// Re-renders all shadow textures for shadow casters that lie in the leaf
// list
virtual void ComputeShadowTextures(const CViewSetup &view, int leafCount,
LeafIndex_t *pLeafList) = 0;
// Frees shadow depth textures for use in subsequent view/frame
virtual void UnlockAllShadowDepthTextures() = 0;
// Renders the shadow texture to screen...
virtual void RenderShadowTexture(int w, int h) = 0;
// Sets the shadow direction + color
virtual void SetShadowDirection(const Vector &dir) = 0;
virtual const Vector &GetShadowDirection() const = 0;
virtual void SetShadowColor(unsigned char r, unsigned char g,
unsigned char b) = 0;
virtual void SetShadowDistance(float flMaxDistance) = 0;
virtual void SetShadowBlobbyCutoffArea(float flMinArea) = 0;
virtual void SetFalloffBias(ClientShadowHandle_t handle,
unsigned char ucBias) = 0;
// Marks the render-to-texture shadow as needing to be re-rendered
virtual void MarkRenderToTextureShadowDirty(
ClientShadowHandle_t handle) = 0;
// Advance the frame
virtual void AdvanceFrame() = 0;
// Set and clear flashlight target renderable
virtual void SetFlashlightTarget(ClientShadowHandle_t shadowHandle,
EHANDLE targetEntity) = 0;
// Set flashlight light world flag
virtual void SetFlashlightLightWorld(ClientShadowHandle_t shadowHandle,
bool bLightWorld) = 0;
virtual void SetShadowsDisabled(bool bDisabled) = 0;
virtual void ComputeShadowDepthTextures(const CViewSetup &pView) = 0;
};
//-----------------------------------------------------------------------------
// Singleton
//-----------------------------------------------------------------------------
extern IClientShadowMgr *g_pClientShadowMgr;
#endif // ICLIENTSHADOWMGR_H