initial
This commit is contained in:
150
engine/shadowmgr.h
Normal file
150
engine/shadowmgr.h
Normal file
@@ -0,0 +1,150 @@
|
||||
//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef SHADOWMGR_H
|
||||
#define SHADOWMGR_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "engine/ishadowmgr.h"
|
||||
#include "mathlib/vmatrix.h"
|
||||
#include "surfacehandle.h"
|
||||
#include "mathlib/ssemath.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDispInfo;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Shadow decals are applied to a single surface
|
||||
//-----------------------------------------------------------------------------
|
||||
typedef unsigned short ShadowDecalHandle_t;
|
||||
|
||||
enum
|
||||
{
|
||||
SHADOW_DECAL_HANDLE_INVALID = (ShadowDecalHandle_t)~0
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// This structure contains the vertex information for shadows
|
||||
//-----------------------------------------------------------------------------
|
||||
struct ShadowVertex_t
|
||||
{
|
||||
Vector m_Position;
|
||||
Vector m_ShadowSpaceTexCoord;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
SHADOW_VERTEX_TEMP_COUNT = 48
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Used to clip the shadow decals
|
||||
//-----------------------------------------------------------------------------
|
||||
struct ShadowClipState_t
|
||||
{
|
||||
int m_CurrVert;
|
||||
int m_TempCount;
|
||||
int m_ClipCount;
|
||||
ShadowVertex_t m_pTempVertices[SHADOW_VERTEX_TEMP_COUNT];
|
||||
ShadowVertex_t* RESTRICT m_ppClipVertices[2][SHADOW_VERTEX_TEMP_COUNT];
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// This structure contains info to accelerate shadow darkness computation
|
||||
//-----------------------------------------------------------------------------
|
||||
struct ShadowDecalRenderInfo_t
|
||||
{
|
||||
Vector2D m_vTexOrigin;
|
||||
Vector2D m_vTexSize;
|
||||
float m_flFalloffOffset;
|
||||
float m_flOOZFalloffDist;
|
||||
float m_flFalloffAmount;
|
||||
float m_flFalloffBias;
|
||||
Vector m_vShadowFalloffParams; // params munged for use in the shader
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Shadow-related functionality internal to the engine
|
||||
//-----------------------------------------------------------------------------
|
||||
abstract_class IShadowMgrInternal : public IShadowMgr
|
||||
{
|
||||
public:
|
||||
virtual void LevelInit( int nSurfCount ) = 0;
|
||||
virtual void LevelShutdown() = 0;
|
||||
|
||||
// This surface has been rendered; and we'll want to render the shadows
|
||||
// on this surface
|
||||
virtual void AddShadowsOnSurfaceToRenderList( ShadowDecalHandle_t decalHandle ) = 0;
|
||||
|
||||
// This will render all shadows that were previously added using
|
||||
// AddShadowsOnSurfaceToRenderList. If there's a model to world transform
|
||||
// for the shadow receiver, then send it in!
|
||||
// NOTE: This draws both shadows and projected textures.
|
||||
virtual void RenderProjectedTextures( IMatRenderContext *pRenderContext, VMatrix const* pModelToWorld = 0 ) = 0;
|
||||
|
||||
// NOTE: This draws shadows
|
||||
virtual void RenderShadows( IMatRenderContext *pRenderContext, VMatrix const* pModelToWorld = 0 ) = 0;
|
||||
|
||||
// NOTE: This draws flashlights
|
||||
virtual void RenderFlashlights( bool bDoMasking, bool bDoSimpleProjections, VMatrix const* pModelToWorld = 0 ) = 0;
|
||||
|
||||
// Clears the list of shadows to render
|
||||
virtual void ClearShadowRenderList() = 0;
|
||||
|
||||
// Projects + clips shadows
|
||||
// count + ppPosition describe an array of pointers to vertex positions
|
||||
// of the unclipped shadow
|
||||
// ppOutVertex is pointed to the head of an array of pointers to
|
||||
// clipped vertices the function returns the number of clipped vertices
|
||||
virtual int ProjectAndClipVertices( ShadowHandle_t handle, int count,
|
||||
Vector** ppPosition, ShadowVertex_t*** ppOutVertex ) = 0;
|
||||
|
||||
// Computes information for rendering
|
||||
virtual void ComputeRenderInfo( ShadowDecalRenderInfo_t* pInfo, ShadowHandle_t handle ) const = 0;
|
||||
|
||||
// Shadow state...
|
||||
virtual unsigned short InvalidShadowIndex( ) = 0;
|
||||
virtual void SetModelShadowState( ModelInstanceHandle_t instance ) = 0;
|
||||
|
||||
virtual void SetNumWorldMaterialBuckets( int numMaterialSortBins ) = 0;
|
||||
|
||||
virtual void DrawFlashlightDecals( IMatRenderContext *pRenderContext, int sortGroup, bool bDoMasking, float flFade = 1.0f ) = 0;
|
||||
|
||||
virtual void DrawFlashlightDecalsOnSurfaceList( IMatRenderContext *pRenderContext, SurfaceHandle_t *pList, int listCount, bool bDoMasking ) = 0;
|
||||
|
||||
virtual void DrawFlashlightOverlays( IMatRenderContext *pRenderContext, int nSortGroup, bool bDoMasking ) = 0;
|
||||
|
||||
virtual void DrawFlashlightDepthTexture( ) = 0;
|
||||
|
||||
virtual void DrawFlashlightDecalsOnDisplacements( IMatRenderContext *pRenderContext, int sortGroup, CDispInfo **visibleDisps, int nVisibleDisps, bool bDoMasking ) = 0;
|
||||
|
||||
virtual void SetFlashlightStencilMasks( bool bDoMasking ) = 0;
|
||||
virtual bool ModelHasShadows( ModelInstanceHandle_t instance ) = 0;
|
||||
|
||||
virtual int ProjectAndClipVerticesEx( ShadowHandle_t handle, int count,
|
||||
Vector** ppPosition, ShadowVertex_t*** ppOutVertex, ShadowClipState_t& clip ) = 0;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Singleton
|
||||
//-----------------------------------------------------------------------------
|
||||
#ifndef DEDICATED
|
||||
extern IShadowMgrInternal* g_pShadowMgr;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user