Rebel Fork Framework
Urho3D::LightProcessor Class Reference

Manages light parameters, lit geometries, shadow splits and shadow casters. More...

#include <Urho3D/RenderPipeline/LightProcessor.h>

Inheritance diagram for Urho3D::LightProcessor:
Urho3D::NonCopyable

Public Member Functions

 LightProcessor (Light *light)
 
void BeginUpdate (DrawableProcessor *drawableProcessor, LightProcessorCallback *callback)
 Begin update from main thread.
 
void Update (DrawableProcessor *drawableProcessor, const LightProcessorCallback *callback)
 Update light in worker thread.
 
void EndUpdate (DrawableProcessor *drawableProcessor, LightProcessorCallback *callback, unsigned pcfKernelSize)
 End update from main thread.
 
unsigned GetForwardLitHash () const
 
unsigned GetShadowHash (unsigned splitIndex) const
 
unsigned GetLightVolumeHash () const
 
Light * GetLight () const
 
const ea::vector< Drawable * > & GetLitGeometries () const
 
bool HasForwardLitGeometries () const
 
bool HasLitGeometries () const
 
bool DoesOverlapCamera () const
 
bool HasShadow () const
 
IntVector2 GetShadowMapSize () const
 
unsigned GetNumSplits () const
 
const ShadowSplitProcessor * GetSplit (unsigned splitIndex) const
 
ShadowSplitProcessor * GetMutableSplit (unsigned splitIndex)
 
ea::span< const ShadowSplitProcessor > GetSplits () const
 
ea::span< ShadowSplitProcessor > GetMutableSplits ()
 
ShadowMapRegion GetShadowMap () const
 
const CookedLightParams & GetParams () const
 

Static Public Attributes

static const unsigned NumSplitFramesToLive = 600
 Number of frames for shadow splits expiration.
 

Private Member Functions

void InitializeShadowSplits (DrawableProcessor *drawableProcessor)
 
void UpdateHashes ()
 
void CookShaderParameters (Camera *cullCamera, const DrawableProcessorSettings &settings)
 
IntVector2 GetNumSplitsInGrid () const
 

Private Attributes

Light * light_ {}
 
ea::vector< ShadowSplitProcessor > splits_
 
unsigned splitRemainingTimeToLive_ {}
 
RenderBackend renderBackend_ {}
 
bool isShadowRequested_ {}
 
unsigned numSplitsRequested_ {}
 
bool cameraIsInsideLightVolume_ {}
 
unsigned numActiveSplits_ {}
 
int shadowMapSplitSize_ {}
 
IntVector2 shadowMapSize_ {}
 
bool hasLitGeometries_ {}
 
bool hasForwardLitGeometries_ {}
 
ea::vector< Drawable * > litGeometries_
 
ea::vector< Drawable * > shadowCasterCandidates_
 
ShadowMapRegion shadowMap_
 Accumulative shadow map region containing all the splits.
 
CookedLightParams cookedParams_
 
unsigned forwardLitBatchHash_ {}
 
unsigned lightVolumeBatchHash_ {}
 
ea::array< unsigned, MAX_LIGHT_SPLITS > shadowBatchStateHashes_ {}
 

Additional Inherited Members

- Protected Member Functions inherited from Urho3D::NonCopyable
 NonCopyable (const NonCopyable &other)=delete
 
 NonCopyable (NonCopyable &&other)=delete
 
NonCopyable & operator= (const NonCopyable &other)=delete
 
NonCopyable & operator= (NonCopyable &&other)=delete
 

Detailed Description

Manages light parameters, lit geometries, shadow splits and shadow casters.

Member Function Documentation

◆ GetForwardLitHash()

unsigned Urho3D::LightProcessor::GetForwardLitHash ( ) const
inline

Return pipeline state hashes

◆ GetLight()

Light * Urho3D::LightProcessor::GetLight ( ) const
inline

Return values are always valid

◆ GetLitGeometries()

const ea::vector< Drawable * > & Urho3D::LightProcessor::GetLitGeometries ( ) const
inline

Return values are valid after threaded update

◆ GetSplit()

const ShadowSplitProcessor * Urho3D::LightProcessor::GetSplit ( unsigned  splitIndex) const
inline

Return values are valid after update is finished

◆ InitializeShadowSplits()

void Urho3D::LightProcessor::InitializeShadowSplits ( DrawableProcessor *  drawableProcessor)
private

Setup splits

Member Data Documentation

◆ cameraIsInsideLightVolume_

bool Urho3D::LightProcessor::cameraIsInsideLightVolume_ {}
private

Processing results

◆ forwardLitBatchHash_

unsigned Urho3D::LightProcessor::forwardLitBatchHash_ {}
private

Pipeline state hashes

◆ isShadowRequested_

bool Urho3D::LightProcessor::isShadowRequested_ {}
private

Parameters extracted from light settings

◆ litGeometries_

ea::vector<Drawable*> Urho3D::LightProcessor::litGeometries_
private

Point and spot lights: only forward lit geometries. Directional lights: all lit geometries, for shadow focusing.

◆ shadowCasterCandidates_

ea::vector<Drawable*> Urho3D::LightProcessor::shadowCasterCandidates_
private

Point and spot lights: all possible shadow casters. Directional lights: temporary buffer for split queries.


The documentation for this class was generated from the following files: