class Enlighten::RectangleLight::CachedData
Cached data for rectangle light.
Variables
Name | Description |
---|---|
Geo::v128 m_Colour | Colour. |
Geo::v128 m_Direction | Forward direction. |
bool m_HasChanged | Whether the light has changed since it was last given to the extended direct lighting api. |
Geo::u32 m_HasVisibilityData | Has visibility data? |
float m_Height | Height. |
const eLightType m_LightType | Type of input light corresponding to an eLightType enum value. |
Geo::u64 m_Padding | Unused (this class is usually extended by one that starts with multiple v128s) |
Geo::u32 m_PaddingA | Unused padding. |
Geo::u32 m_PaddingB | Unused padding. |
Geo::u32 m_PaddingC | Unused padding. |
Geo::v128 m_Position | Position. |
Geo::v128 m_RightDirection | Right direction. |
Geo::v128 m_UpDirection | Up direction. |
const Geo::u8 * m_VisibilityData | Visibility data. |
Geo::u64 m_VisibilityData64 | Visibility data. |
float m_Width | Width. |
Functions
Enlighten::RectangleLight::CachedData::CachedData
public: CachedData
(
const RectangleLight & rectangleLight,
const void * perDusterVisibility
)
Constructor.
GEO_CONTROLLED_INLINE float Enlighten::RectangleLight::CachedData::CalcEdgeContribution
public: GEO_CONTROLLED_INLINE float CalcEdgeContribution
(
Geo::v128 v0,
Geo::v128 v1,
Geo::v128 samplePos,
const Geo::v128 & sampleNormal
) const
Note - the 4th v128 parameter has to be passed as a reference as the vs2008 compiler can't pass more than 3 v128s as values and preserve alignment.
void Enlighten::RectangleLight::CachedData::Hash
public: void Hash
(
Helpers::Hasher & hash,
Geo::u32 clusterVisSize,
Geo::u32 quadVisSize
)
Hash the light data.
Enlighten::InputLightBase::InputLightBase
protected: InputLightBase
(
eLightType lightType
)
Constructor.
Enlighten::InputLightBase::InputLightBase
protected: InputLightBase
(
eLightType lightType,
bool hasChanged
)
Constructor.
GEO_CONTROLLED_INLINE bool Enlighten::RectangleLight::CachedData::IsIntersectingCluster
public: GEO_CONTROLLED_INLINE bool IsIntersectingCluster
(
const Geo::v128 & bbMin,
const Geo::v128 & bbMax,
const Geo::v128 & minNormalFlipped,
const Geo::v128 & maxNormalFlipped
) const
Complex light V normalBoundingBox intersection test.
GEO_CONTROLLED_INLINE bool Enlighten::RectangleLight::CachedData::IsIntersectingClusterGroup
public: GEO_CONTROLLED_INLINE bool IsIntersectingClusterGroup
(
const Geo::v128 & bbMin,
const Geo::v128 & bbMax,
const Geo::v128 & minNormalFlipped,
const Geo::v128 & maxNormalFlipped
) const
Light v ClusterGroup Bounding box intersection test.
GEO_CONTROLLED_INLINE bool Enlighten::RectangleLight::CachedData::IsIntersectingSystem
public: GEO_CONTROLLED_INLINE bool IsIntersectingSystem
(
const Geo::v128 & bbMin,
const Geo::v128 & bbMax
) const
Simple Light V system BoundingBox intersection test.
GEO_CONTROLLED_INLINE void Enlighten::RectangleLight::CachedData::ShadeFourSamples
public: GEO_CONTROLLED_INLINE void ShadeFourSamples
(
const Geo::v128 & positionsX,
const Geo::v128 & positionsY,
const Geo::v128 & positionsZ,
const Geo::v128 & normalsX,
const Geo::v128 & normalsY,
const Geo::v128 & normalsZ,
Geo::u32 sampleIdx,
Geo::v128 & colourOut0,
Geo::v128 & colourOut1,
Geo::v128 & colourOut2,
Geo::v128 & colourOut3
) const
Shades the given samples.
GEO_CONTROLLED_INLINE Geo::v128 Enlighten::RectangleLight::CachedData::ShadePoint
public: GEO_CONTROLLED_INLINEGeo::v128 ShadePoint
(
Geo::v128 samplePos,
Geo::v128 sampleNormal
) const
This computes the illumination on samplePos/sampleNormal from the area light description.
It uses a bit of stokes theorem to integrate the area of the rectangle by clipping and integrating around it's contour.
GEO_CONTROLLED_INLINE Geo::v128 Enlighten::RectangleLight::CachedData::ShadeQuad
public: GEO_CONTROLLED_INLINEGeo::v128 ShadeQuad
(
const Geo::v128 & positionsX,
const Geo::v128 & positionsY,
const Geo::v128 & positionsZ,
const Geo::v128 & normalsX,
const Geo::v128 & normalsY,
const Geo::v128 & normalsZ,
Geo::u32 clusterIdx,
Geo::u32 quadIdx
) const
Shades the given quad.
GEO_CONTROLLED_INLINE Geo::v128 Enlighten::RectangleLight::CachedData::ShadeQuadIntensities
public: GEO_CONTROLLED_INLINEGeo::v128 ShadeQuadIntensities
(
const Geo::v128 & positionsX,
const Geo::v128 & positionsY,
const Geo::v128 & positionsZ,
const Geo::v128 & normalsX,
const Geo::v128 & normalsY,
const Geo::v128 & normalsZ,
const Geo::v128 & visibility
) const
Shades the given quads.