sqwarmed/sdk_src/game/client/iclientshadowmgr.h

135 lines
5.4 KiB
C
Raw Normal View History

2024-08-29 19:18:30 -04:00
//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
// $NoKeywords: $
//
//===========================================================================//
#ifndef ICLIENTSHADOWMGR_H
#define ICLIENTSHADOWMGR_H
#ifdef _WIN32
#pragma once
#endif
#include "IGameSystem.h"
#include "IClientEntityInternal.h"
#include "engine/ishadowmgr.h"
#include "IVRenderView.h"
#include "toolframework/IToolEntity.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 nEntIndex, int flags, CBitVec< MAX_SPLITSCREEN_PLAYERS > *pSplitScreenBits = NULL ) = 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;
// Create simple projected texture. it is not a light or a shadow, but this system does most of the work already for it
virtual ClientShadowHandle_t CreateProjection( const FlashlightState_t &lightState ) = 0;
virtual void UpdateProjectionState( ClientShadowHandle_t shadowHandle, const FlashlightState_t &lightState ) = 0;
virtual void DestroyProjection( 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, WorldListLeafData_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;
virtual void DrawVolumetrics( const CViewSetup &view ) = 0;
// Toggle shadow casting from world light sources
virtual void SetShadowFromWorldLightsEnabled( bool bEnable ) = 0;
virtual void DrawDeferredShadows( const CViewSetup &view, int leafCount, WorldListLeafData_t* pLeafList ) = 0;
virtual void InitRenderTargets() = 0;
// Reprojects moved shadows against the world
virtual void ReprojectShadows() = 0;
virtual void UpdateSplitscreenLocalPlayerShadowSkip() = 0;
virtual void GetFrustumExtents( ClientShadowHandle_t handle, Vector &vecMin, Vector &vecMax ) = 0;
virtual void ShutdownRenderTargets( void ) =0;
};
//-----------------------------------------------------------------------------
// Singleton
//-----------------------------------------------------------------------------
extern IClientShadowMgr* g_pClientShadowMgr;
#endif // ICLIENTSHADOWMGR_H