mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 09:49:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef LIGHTCACHE_H
|
||||
#define LIGHTCACHE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "mathlib/vector.h"
|
||||
|
||||
#define MAXLOCALLIGHTS 4
|
||||
|
||||
class IHandleEntity;
|
||||
struct dworldlight_t;
|
||||
FORWARD_DECLARE_HANDLE( LightCacheHandle_t );
|
||||
|
||||
struct LightingState_t;
|
||||
|
||||
typedef Vector AmbientCube_t[6];
|
||||
|
||||
struct LightingState_t
|
||||
{
|
||||
Vector r_boxcolor[6]; // ambient, and lights that aren't in locallight[]
|
||||
int numlights;
|
||||
dworldlight_t *locallight[MAXLOCALLIGHTS];
|
||||
void ZeroLightingState( void )
|
||||
{
|
||||
int i;
|
||||
for( i = 0; i < 6; i++ )
|
||||
{
|
||||
r_boxcolor[i].Init();
|
||||
}
|
||||
numlights = 0;
|
||||
}
|
||||
|
||||
bool HasAmbientColors()
|
||||
{
|
||||
for ( int i = 0; i < 6; i++ )
|
||||
{
|
||||
if ( !r_boxcolor[i].IsZero(1e-4f) )
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void AddLocalLight( dworldlight_t *pLocalLight )
|
||||
{
|
||||
if ( numlights >= MAXLOCALLIGHTS )
|
||||
return;
|
||||
for ( int i = 0; i < numlights; i++ )
|
||||
{
|
||||
if ( locallight[i] == pLocalLight )
|
||||
return;
|
||||
}
|
||||
locallight[numlights] = pLocalLight;
|
||||
numlights++;
|
||||
}
|
||||
|
||||
void AddAllLocalLights( const LightingState_t &src )
|
||||
{
|
||||
for ( int i = 0; i < src.numlights; i++ )
|
||||
{
|
||||
AddLocalLight( src.locallight[i] );
|
||||
}
|
||||
}
|
||||
|
||||
void CopyLocalLights( const LightingState_t &src )
|
||||
{
|
||||
numlights = src.numlights;
|
||||
for ( int i = 0; i < src.numlights; i++ )
|
||||
{
|
||||
locallight[i] = src.locallight[i];
|
||||
}
|
||||
}
|
||||
|
||||
LightingState_t()
|
||||
{
|
||||
ZeroLightingState();
|
||||
}
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
LIGHTCACHEFLAGS_STATIC = 0x1,
|
||||
LIGHTCACHEFLAGS_DYNAMIC = 0x2,
|
||||
LIGHTCACHEFLAGS_LIGHTSTYLE = 0x4,
|
||||
LIGHTCACHEFLAGS_ALLOWFAST = 0x8,
|
||||
};
|
||||
|
||||
class ITexture;
|
||||
|
||||
|
||||
// Called each frame to check for reinitializing the lightcache based on cvar changes.
|
||||
void R_StudioCheckReinitLightingCache();
|
||||
|
||||
|
||||
// static prop version
|
||||
LightingState_t *LightcacheGetStatic( LightCacheHandle_t cache, ITexture **pEnvCubemap,
|
||||
unsigned int flags = ( LIGHTCACHEFLAGS_STATIC |
|
||||
LIGHTCACHEFLAGS_DYNAMIC |
|
||||
LIGHTCACHEFLAGS_LIGHTSTYLE ) );
|
||||
// dynamic prop version
|
||||
struct LightcacheGetDynamic_Stats
|
||||
{
|
||||
bool m_bHasNonSwitchableLightStyles;
|
||||
bool m_bHasSwitchableLightStyles;
|
||||
bool m_bHasDLights;
|
||||
bool m_bNeedsSwitchableLightStyleUpdate;
|
||||
};
|
||||
ITexture *LightcacheGetDynamic( const Vector& origin, LightingState_t& lightingState,
|
||||
LightcacheGetDynamic_Stats &stats,
|
||||
unsigned int flags = ( LIGHTCACHEFLAGS_STATIC |
|
||||
LIGHTCACHEFLAGS_DYNAMIC |
|
||||
LIGHTCACHEFLAGS_LIGHTSTYLE ), bool bDebugModel=false );
|
||||
|
||||
// Reset the light cache.
|
||||
void R_StudioInitLightingCache( void );
|
||||
|
||||
// force recomputation for static lighting cache entries
|
||||
void InvalidateStaticLightingCache(void);
|
||||
|
||||
// Compute the comtribution of D- and E- lights at a point + normal
|
||||
void ComputeDynamicLighting( const Vector& pt, const Vector* pNormal, Vector& color );
|
||||
|
||||
// Computes an average color (of sorts) at a particular point + optional normal
|
||||
void ComputeLighting( const Vector& pt, const Vector* pNormal, bool bClamp, Vector& color, Vector *pBoxColors );
|
||||
|
||||
// Finds ambient lights
|
||||
dworldlight_t* FindAmbientLight();
|
||||
|
||||
// Precache lighting
|
||||
LightCacheHandle_t CreateStaticLightingCache( const Vector& origin, const Vector& mins, const Vector& maxs );
|
||||
void ClearStaticLightingCache();
|
||||
|
||||
// Computes the static vertex lighting term from a large number of spherical samples
|
||||
bool ComputeVertexLightingFromSphericalSamples( const Vector& vecVertex,
|
||||
const Vector &vecNormal, IHandleEntity *pIgnoreEnt, Vector *pLinearColor );
|
||||
|
||||
bool StaticLightCacheAffectedByDynamicLight( LightCacheHandle_t handle );
|
||||
bool StaticLightCacheAffectedByAnimatedLightStyle( LightCacheHandle_t handle );
|
||||
bool StaticLightCacheNeedsSwitchableLightUpdate( LightCacheHandle_t handle );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Adds a world light to the ambient cube
|
||||
//-----------------------------------------------------------------------------
|
||||
void AddWorldLightToAmbientCube( dworldlight_t* pWorldLight, const Vector &vecLightingOrigin, AmbientCube_t &ambientCube );
|
||||
|
||||
void InitDLightGlobals( int nMapVersion );
|
||||
|
||||
// This is different for shipped HL2. . .
|
||||
extern float g_flMinLightingValue;
|
||||
|
||||
#endif // LIGHTCACHE_H
|
||||
Reference in New Issue
Block a user