This is the documentation for Enlighten.

module Core Runtime System

Classes

Name Description
Enlighten::ClusterAlbedoWorkspaceMaterialData

Constitutes the precomputed material data for a system.

Enlighten::EntireProbeSetTask

An EntireProbeSetTask solves an entire set of probes as an atomic block.

Enlighten::InputTextureSamplerParameters

A class containing the parameters to be used as input to the albedo/emissive/transparency sampling stage.

Enlighten::InputWorkspace

Constitutes the core precomputed data for the input lighting generation for a system.

Enlighten::InputWorkspaceMetaData

A data block that describes essential properties of an input workspace.

Enlighten::PppiAtlasFootprint

A measure of the space required to update the PPPI atlas.

Enlighten::ProbeSetOctreeNode

The data associated with each non-empty octree node.

Enlighten::ProbeSetVirtualProbe

A pair of probes which can be averaged to produce a 'virtual' probe output.

Enlighten::RadCubeMapCore

Constitutes the core precomputed data for a cube map.

Enlighten::RadCubeMapMetaData

A data block that describes essential properties of a cube map.

Enlighten::RadCubeMapTask

Structure describing a task to generate a cube map.

Enlighten::RadDataBlock

Facilitates storage of core Enlighten data.

Enlighten::RadIrradianceTask

Structure describing a task using the irradiance technique.

Enlighten::RadProbeSetCore

Constitutes the core precomputed data for a probe set.

Enlighten::RadProbeSetMetaData

A data block that describes essential properties of a run-time probe set.

Enlighten::RadProbeTask

A Probe task specifies a list of probe points whose lighting values will be calculated when the task is solved.

Enlighten::RadSystemCore

Constitutes the core precomputed data for a system.

Enlighten::RadSystemMetaData

A data block that describes essential properties of a rad system, including it's id, output and input textures sizes, budget, pixel utilisation and other debugging data.

Enlighten::ResampleBounceParameters

A class containing the parameters to be used as input to the bounce resampling stage.

Enlighten::ResampleTextureParameters

A class containing the parameters to be used if sampling from a texture is required.

Enlighten::SolveBounceTask

Structure describing a task which solves directly to the bounce buffer and does not update any textures.

Functions

Name Description
AllLightingInputsStatic(const InputLightingBuffer **, Geo::s32, const InputLightingBuffer *)

Returns the number of frames since the last update that changed any of the given light inputs.

CalcDirectionalIrradianceMemory(const Enlighten::RadSystemCore *)

Tells you how much memory in a RadSystemCore is used by the directional irradiance technique.

CalcDirectionPaletteSize()

Tells you how much memory is required to create a DirectionPalette, which is a required input to an Enlighten::EntireProbeSetTask.

CalcIrradianceMemory(const Enlighten::RadSystemCore *)

Tells you how much memory in a RadSystemCore is used by the irradiance technique.

CalcRadCubeMapCoreTotalMemory(const Enlighten::RadCubeMapCore *)

Tells you how much memory in total is used by a RadCubeMapCore.

CalcRadProbeSetCoreTotalMemory(const Enlighten::RadProbeSetCore *)

Tells you how much memory in total is used by a RadProbeSetCore.

CalcRadSystemCoreTotalMemory(const Enlighten::RadSystemCore *)

Tells you how much memory in total is used by a RadSystemCore.

CalcRequiredPersistentDataSize(const Enlighten::RadSystemCore *)

Tells you how much memory is required for the intermediate bounce output data for this radiosity core.

CalcRequiredWorkspaceMemory(const RadCubeMapCore *)

Tells you how much workspace memory is required by SolveCubeMapTask to solve a specific cube map.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::InputWorkspace *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::RadProbeSetCore *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::RadCubeMapCore *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::RadSystemCore *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::ClusterAlbedoWorkspaceMaterialData *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::InputWorkspaceMetaData *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::RadCubeMapMetaData *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::AlbedoBuffer *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::PrecomputedVisibilityData *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::DynamicMaterialWorkspace *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::IncidentLightingBuffer *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::InputLightingBuffer *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::RadDataBlock &)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::RadSystemMetaData *)

Converts the endian format of a runtime object.

ConvertEndian(Geo::EConvertEndianMode, Enlighten::RadProbeSetMetaData *)

Converts the endian format of a runtime object.

CreateDirectionPalette(const Geo::v128 &, const Geo::v128 &, const Geo::v128 &, const Geo::s8 *, void *)

Create a Direction Palette for use with an EntireProbeSetTask.

FreezeEntireProbeSetTask(const Enlighten::EntireProbeSetTask *, void *, Geo::u32 &, Geo::u32 &)

The temporal coherence optimization - if used - requires that all probe sets are kept in sync, so that no changes in lighting are missed.

FreezeInputLightingBuffer(InputLightingBuffer *)

The temporal coherence optimisation - if used - requires that all systems are kept in sync, so that no changes in lighting are missed.

FreezeIrradianceTask(const Enlighten::RadIrradianceTask *, void *, Geo::u32 &, Geo::u32 &, const InputLightingBuffer *)

The temporal coherence optimization - if used - requires that all systems are kept in sync, so that no changes in lighting are missed.

GetEnlightenFormatFriendlyName(Geo::u32)

Helper function for getting irradiance output format friendly name.

GetEnlightenOutputFormatBytesPerPixel(Geo::u32)

Helper function to get the number of bytes/pixel per texture for a given output format.

GetForceDisableFma4()

Get the state of the force disable FMA4 support flag.

GetInputWorkspaceGUID(const Enlighten::RadCubeMapCore *, Geo::s32)

Returns the GUID of a specific entry in the expected input lighting buffer list.

GetInputWorkspaceGUID(const Enlighten::RadProbeSetCore *, Geo::s32)

Returns the GUID of a specific entry in the expected input lighting buffer list.

GetInputWorkspaceGUID(const Enlighten::RadSystemCore *, Geo::s32)

Returns the GUID of a specific entry in the expected input lighting buffer list.

GetInputWorkspaceGUID(const Enlighten::RadDataBlock *, Geo::s32)

Returns the GUID of a specific entry in the expected input lighting buffer list.

GetInputWorkspaceListLength(const Enlighten::RadDataBlock *)

Returns the length of the input lighting buffer list expected when solving radiosity using this core data.

GetInputWorkspaceListLength(const Enlighten::RadSystemCore *)

Returns the length of the input lighting buffer list expected when solving radiosity using this core data.

GetInputWorkspaceListLength(const Enlighten::RadCubeMapCore *)

Returns the length of the input lighting buffer list expected when solving radiosity using this core data.

GetInputWorkspaceListLength(const Enlighten::RadProbeSetCore *)

Returns the length of the input lighting buffer list expected when solving radiosity using this core data.

GetNumOctreeNodes(const Enlighten::RadProbeSetCore *)

Returns the number of octree nodes within the specified octree probe set.

GetNumVirtualProbes(const Enlighten::RadProbeSetCore *)

Returns the number of virtual probes within the specified probe set.

GetOctreeEnvironmentVisibility(const Enlighten::RadProbeSetCore *)

Returns a pointer to the array of environment visibilities within the specified octree probe.

GetOctreeEnvironmentVisibilityShOrder(const Enlighten::RadProbeSetCore *)

Returns the SH order for environment visibility of this octree probe set.

GetOctreeInterpolatedProbeCounts(const Enlighten::RadProbeSetCore *)

Returns the number of interpolated probes within the specified octree probe set.

GetOctreeInterpolatedProbeIndices(const Enlighten::RadProbeSetCore *)

Returns a pointer to the array of interpolated probe indices within the specified octree probe set.

GetOctreeInterpolatedProbeWidths(const Enlighten::RadProbeSetCore *)

Returns a pointer to the array of interpolated probe widths within the specified octree probe set.

GetOctreeLevel(const Enlighten::RadProbeSetCore *)

Returns the level with the probe set hierarchy of this octree probe set.

GetOctreeNodeCounts(const Enlighten::RadProbeSetCore *)

Returns the number of octree nodes within the specified octree probe set.

GetOctreeNodes(const Enlighten::RadProbeSetCore *)

Returns a pointer to the array of octree nodes within the specified octree probe set.

GetOctreePppiAtlasFootprint(const Enlighten::RadProbeSetCore *)

Returns the PPPI atlas footprint of the specified octree probe set.

GetOctreePppiNodes(const Enlighten::RadProbeSetCore *)

Returns a pointer to the array of octree nodes within the specified octree probe set.

GetOctreeRootProbes(const Enlighten::RadProbeSetCore *)

Returns a pointer to the root probes in the specified octree probe set.

GetOctreeSampledProbeCounts(const Enlighten::RadProbeSetCore *)

Returns the number of sampled probes within the specified octree probe set.

GetOctreeSampledProbes(const Enlighten::RadProbeSetCore *)

Returns a pointer to the array of sampled probes within the specified octree probe set.

GetOctreeTileCounts(const Enlighten::RadProbeSetCore *)

Returns the number of PPPI indirection tiles within the specified octree probe set.

GetOctreeTileElements(const Enlighten::RadProbeSetCore *)

Returns a pointer to the array of octree tile elements within the specified octree probe set.

GetOctreeVoxelSize(const Enlighten::RadProbeSetCore *)

Returns the voxel size used when the specified octree probe set was precomputed.

GetOptimisedSolverForPlatform(Geo::ePlatform)

Function returning the correct optimised solver based on the compilation environment.

GetOutputTextureSize(const RadSystemCore &)

Returns the size of the output texture required for this radiosity data.

GetOutputTextureSize(const RadCubeMapCore &)

Returns the size of the output texture required for this radiosity data.

GetProbeEnvironmentVisibility(Geo::s32, const Enlighten::RadProbeSetCore *)

Retrieves the light probe environment visibility for the given probe in the volume probe data.

GetProbeVisibility(Geo::s32, const Enlighten::RadProbeSetCore *, float *)

Retrieves the light probe visibility for the given probe in the volume probe data.

GetVirtualProbes(const Enlighten::RadProbeSetCore *)

Returns a pointer to the array of virtual probes within the specified probe set.

HashInputLightingElements(const InputLightingBuffer **, Geo::s32)

Hash the guids and pointers of the InputLightingBuffer array.

IsFixedPointFormat(eOutputFormat)

Returns true for formats with a fixed range (0-1).

IsInputLightingBufferStatic(const InputLightingBuffer *)

Returns the number of frames since the last update that changed the given input lighting buffer.

IsProbeCulled(Geo::s32, const Enlighten::RadProbeSetCore *)

Returns TRUE if the probe was culled during precompute.

IsValidOutputFormat(Geo::u32)

Checks if the given output format enumeration is valid.

PrepareInputLightingList(const Enlighten::RadDataBlock *, const Enlighten::InputLightingBuffer **, Geo::s32, const Enlighten::InputLightingBuffer **)

Places the unordered list of lighting buffers into the correct order for the solver.

PrepareInputLightingList(const Enlighten::RadProbeSetCore *, const Enlighten::InputLightingBuffer **, Geo::s32, const Enlighten::InputLightingBuffer **)

Places the unordered list of lighting buffers into the correct order for the solver.

PrepareInputLightingList(const Enlighten::RadSystemCore *, const Enlighten::InputLightingBuffer **, Geo::s32, const Enlighten::InputLightingBuffer **)

Places the unordered list of lighting buffers into the correct order for the solver.

PrepareInputLightingList(const Enlighten::RadCubeMapCore *, const Enlighten::InputLightingBuffer **, Geo::s32, const Enlighten::InputLightingBuffer **)

Places the unordered list of lighting buffers into the correct order for the solver.

ResampleBounce(const Enlighten::ResampleBounceParameters &, Geo::u32 &)

After SolveIrradianceTask is run, the ResampleBounce() function populates an Enlighten::BounceBuffer with bounce data.

SetForceDisableFma4(bool)

Set whether to force disable FMA4 support.

SolveBounceBufferTask(const Enlighten::SolveBounceTask *, void *, Geo::u32 &, Geo::u32 &)

Solve the radiosity directly to a bounce buffer only.

SolveCubeMapTask(const Enlighten::RadCubeMapTask *, void *, Geo::u32 &, Geo::u32 &)

Solve the specified cube map task using a given workspace.

SolveEntireProbeSetTask(const Enlighten::EntireProbeSetTask *, void *, Geo::u32 &, Geo::u32 &)

Solve the specified EntireProbeSetTask.

SolveIrradianceTask(const Enlighten::RadIrradianceTask *, void *, Geo::u32 &, Geo::u32 &)

Solve the specified irradiance task using a given workspace.

SolveProbeTaskL1(const Enlighten::RadProbeTask *, Geo::u32 &)

Solve the specified L1 probe task.

SolveProbeTaskL2(const Enlighten::RadProbeTask *, Geo::u32 &)

Solve the specified L2 probe task.

Enums

Name Description
eCubemapFilterMode

Enumeration of the different types of cubemap mip filter.

eOutputFormat

Output formats.

eOutputFormatByteOrder

To support both DX9 and DX11 rendering with the same shader code, the solve functions can output 8-bit-per-pixel texture data in either byte order.

eProbeOutputFormat

Probe Interpolation output formats.

eRadDataType

Valid data types for use with the RadDataBlock class.

eSHOrder

Supported Spherical Harmonic types.

eSolverType

Valid solver types for use with the RadDataBlock class.

Typedefs

Name Description
IncidentLightingBuffer BounceBuffer

BounceBuffer type used for re-sampling the bounce for feedback into the input lighting.

Geo::FixedSizeArray< Geo::u32, 9 > PppiGroupedSize

The size of each PPPI data group within a probe set.

Geo::FixedSizeArray< PppiAtlasFootprint, 9 > PppiProbeSetFootprint

The PPPI atlas footprint of a probe set.


Geo::s32 GEO_CALL Enlighten::AllLightingInputsStatic


public: Geo::s32GEO_CALL AllLightingInputsStatic
(
    const InputLightingBuffer ** lightingBuffers,
    Geo::s32 numLightingBuffers,
    const InputLightingBuffer * emissiveEnvironment
)


Returns the number of frames since the last update that changed any of the given light inputs.

Parameters
[in] lightingBuffers

The list of input lighting buffers to check for changes (individual entries can be NULL).

[in] numLightingBuffers

The number of input lighting buffers in the list (can be zero).

[in] emissiveEnvironment

The (optional) emissive environment to check for changes.

Returns

Returns the number of updates since the last change to any input.


Geo::u32 GEO_CALL Enlighten::CalcDirectionalIrradianceMemory


public: Geo::u32GEO_CALL CalcDirectionalIrradianceMemory
(
    const Enlighten::RadSystemCore * radCore
)


Tells you how much memory in a RadSystemCore is used by the directional irradiance technique.

This is provided for information purposes only (it doesn't relate to any memory buffer requirement).

Parameters
[in] radCore

A non-null pointer to a valid RadSystemCore object.

Returns

Required memory in bytes, 0xFFFFFFFF upon error.


Geo::u32 GEO_CALL Enlighten::CalcDirectionPaletteSize


public: Geo::u32GEO_CALL CalcDirectionPaletteSize()


Tells you how much memory is required to create a DirectionPalette, which is a required input to an Enlighten::EntireProbeSetTask.

Returns

Required memory in bytes, 0xFFFFFFFF upon error.


Geo::u32 GEO_CALL Enlighten::CalcIrradianceMemory


public: Geo::u32GEO_CALL CalcIrradianceMemory
(
    const Enlighten::RadSystemCore * radCore
)


Tells you how much memory in a RadSystemCore is used by the irradiance technique.

This is provided for information purposes only (it doesn't relate to any memory buffer requirement).

Parameters
[in] radCore

A non-null pointer to a valid RadSystemCore object.

Returns

Required memory in bytes, 0xFFFFFFFF upon error.


Geo::u32 GEO_CALL Enlighten::CalcRadCubeMapCoreTotalMemory


public: Geo::u32GEO_CALL CalcRadCubeMapCoreTotalMemory
(
    const Enlighten::RadCubeMapCore * radCubeMapCore
)


Tells you how much memory in total is used by a RadCubeMapCore.

This is provided for information purposes only (it doesn't relate to any memory buffer requirement). It is simply the sum of the memory used by each of the RadDataBlocks and the RadCubeMapCore itself.

Parameters
[in] radCubeMapCore

A non-null pointer to a valid RadCubeMapCore object.

Returns

Memory in bytes, 0xFFFFFFF upon error.


Geo::u32 GEO_CALL Enlighten::CalcRadProbeSetCoreTotalMemory


public: Geo::u32GEO_CALL CalcRadProbeSetCoreTotalMemory
(
    const Enlighten::RadProbeSetCore * radProbeSetCore
)


Tells you how much memory in total is used by a RadProbeSetCore.

This is provided for information purposes only (it doesn't relate to any memory buffer requirement). It is simply the sum of the memory used by each of the RadDataBlocks and the RadProbeSetCore itself.

Parameters
[in] radProbeSetCore

A non-null pointer to a valid RadProbeSetCore object.

Returns

Memory in bytes, 0xFFFFFFF upon error.


Geo::u32 GEO_CALL Enlighten::CalcRadSystemCoreTotalMemory


public: Geo::u32GEO_CALL CalcRadSystemCoreTotalMemory
(
    const Enlighten::RadSystemCore * radCore
)


Tells you how much memory in total is used by a RadSystemCore.

This is provided for information purposes only (it doesn't relate to any memory buffer requirement). It is simply the sum of the memory used by each of the RadDataBlocks and the RadSystemCore itself.

Parameters
[in] radCore

A non-null pointer to a valid RadSystemCore object.

Returns

Memory in bytes, 0xFFFFFFF upon error.


Geo::u32 GEO_CALL Enlighten::CalcRequiredPersistentDataSize


public: Geo::u32GEO_CALL CalcRequiredPersistentDataSize
(
    const Enlighten::RadSystemCore * radCore
)


Tells you how much memory is required for the intermediate bounce output data for this radiosity core.

The bounce data is an output of SolveIrradianceTask, and an input to DoEndInputLightingTask and DoInputLightingTask.

Parameters
[in] radCore

A pointer to a RadSystemCore to compute the bounce output size for.

Returns

Required memory in bytes, 0xFFFFFFFF upon error.


Geo::u32 GEO_CALL Enlighten::CalcRequiredWorkspaceMemory


public: Geo::u32GEO_CALL CalcRequiredWorkspaceMemory
(
    const RadCubeMapCore * cubeMapCore
)


Tells you how much workspace memory is required by SolveCubeMapTask to solve a specific cube map.

Parameters
[in] cubeMapCore

A non-null pointer to a valid RadCubeMapCore

Returns

Required memory in bytes, 0xFFFFFFFF upon error.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::InputWorkspace * inputWorkspace
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::RadProbeSetCore * probeSetCore
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::RadCubeMapCore * cubeMapCore
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::RadSystemCore * radCore
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::ClusterAlbedoWorkspaceMaterialData * materialData
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::InputWorkspaceMetaData * data
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::RadCubeMapMetaData * data
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::AlbedoBuffer * albedoBuffer
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::PrecomputedVisibilityData * visibilityData
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::DynamicMaterialWorkspace * materialWorkspace
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::IncidentLightingBuffer * incidentLightingBuffer
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::InputLightingBuffer * inputLightingBuffer
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::RadDataBlock & radDataBlock
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::RadSystemMetaData * data
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


void GEO_CALL Enlighten::ConvertEndian


public: void GEO_CALL ConvertEndian
(
    Geo::EConvertEndianMode mode,
    Enlighten::RadProbeSetMetaData * data
)


Converts the endian format of a runtime object.

All data generated by the precompute is in little endian format and before use on big endian machines (i.e. consoles) it must be converted to the native endian format using these functions. This conversion may be done on load, or by some user-defined content generation step. Note that the loader functions in EnlightenUtils assume the data files to be in little endian format, and call these functions at load time to flip them to the native format.


DirectionPalette* GEO_CALL Enlighten::CreateDirectionPalette


public: DirectionPalette *GEO_CALL CreateDirectionPalette
(
    const Geo::v128 & BasisX,
    const Geo::v128 & BasisY,
    const Geo::v128 & BasisZ,
    const Geo::s8 * coefficientOutputOrder,
    void * mem
)


Create a Direction Palette for use with an EntireProbeSetTask.

The returned DirectionPalette can be used with any probeset with matching SH order, axis permutation and coefficient output order. The RadProbeSetMetaData class contains the shOrder, basis and coefficient output order for any given probeset.

Parameters
[in] BasisX

The first of the basis directions. Must be a unit vector along either the X, Y, or Z axis.

[in] BasisY

The second of the basis directions. Must be a unit vector along either the X, Y, or Z axis.

[in] BasisZ

The third of the basis directions. Must be a unit vector along either the X, Y, or Z axis.

[in] coefficientOutputOrder

The output order of the SH coefficients. Must be 9 elements long.

[in] mem

A non-null pointer to a 16-byte aligned block of memory of size calculated with CalcDirectionPaletteSize.

Returns

Pointer to created DirectionPalette, NULL if error.


bool GEO_CALL Enlighten::FreezeEntireProbeSetTask


public: bool GEO_CALL FreezeEntireProbeSetTask
(
    const Enlighten::EntireProbeSetTask * task,
    void * workspace,
    Geo::u32 & timeUs,
    Geo::u32 & numSolvedProbes
)


The temporal coherence optimization - if used - requires that all probe sets are kept in sync, so that no changes in lighting are missed.

Nevertheless, some probe sets can be updated less frequently than others by using the Freeze functions in place of a solve. FreezeEntireProbeSetTask performs the minimal housekeeping required to keep track of light changes for the temporal optimization - no output SH coefficients are updated. The input parameters are exactly the same as for SolveEntireProbeSetTask.

Parameters
[in] task

A valid pointer to the probe task structure to freeze.

[in] workspace

A valid pointer to a block of memory to use as a workspace which must be at least as big as m_RequiredWorkspaceSize in the core meta data.

[out] timeUs

Number of microseconds it took to freeze the task.

[out] numSolvedProbes

Number of probes solved in the task. This will always be 0.


bool GEO_CALL Enlighten::FreezeInputLightingBuffer


public: bool GEO_CALL FreezeInputLightingBuffer
(
    InputLightingBuffer * lightingBuffer
)


The temporal coherence optimisation - if used - requires that all systems are kept in sync, so that no changes in lighting are missed.

Nevertheless, some systems can be updated less frequently than others by using the Freeze functions in place of a solve. FreezeInputLightingBuffer marks an input lighting buffer as frozen. Other systems reading this buffer then recognise that the input hasn't changed. (Neglecting to freeze buffers won't cause visual artefacts, but will result in performing more recalculations than necessary.)

Parameters
[in] lightingBuffer

The input lighting buffer to mark as frozen.


bool GEO_CALL Enlighten::FreezeIrradianceTask


public: bool GEO_CALL FreezeIrradianceTask
(
    const Enlighten::RadIrradianceTask * task,
    void * workspace,
    Geo::u32 & timeUs,
    Geo::u32 & numSolvedPixels,
    const InputLightingBuffer * environmentOnly
)


The temporal coherence optimization - if used - requires that all systems are kept in sync, so that no changes in lighting are missed.

Nevertheless, some systems can be updated less frequently than others by using the Freeze functions in place of a solve. FreezeIrradianceTask performs the minimal housekeeping required to keep track of light changes for the temporal optimization - no output textures are updated. The input parameters are exactly the same as for SolveIrradianceTask.

Parameters
[in] task

A valid pointer to the irradiance task structure to freeze.

[in] workspace

A valid pointer to a block of memory to use as a workspace which must be at least as big as m_RequiredWorkspaceSize in the core meta data.

[out] timeUs

Number of microseconds it took to freeze the task.

[out] numSolvedPixels

Number of output pixels solved in the task. This will always be 0.

[out] environmentOnly

Use in combination with environment only bounce solve.


const char* GEO_CALL Enlighten::GetEnlightenFormatFriendlyName


public: const char *GEO_CALL GetEnlightenFormatFriendlyName
(
    Geo::u32 format
)


Helper function for getting irradiance output format friendly name.


GEO_FORCE_INLINE Geo::s32 GEO_CALL Enlighten::GetEnlightenOutputFormatBytesPerPixel


public: GEO_FORCE_INLINEGeo::s32GEO_CALL GetEnlightenOutputFormatBytesPerPixel
(
    Geo::u32 outputFormat
)


Helper function to get the number of bytes/pixel per texture for a given output format.


bool GEO_CALL Enlighten::GetForceDisableFma4


public: bool GEO_CALL GetForceDisableFma4()


Get the state of the force disable FMA4 support flag.


Geo::GeoGuid GEO_CALL Enlighten::GetInputWorkspaceGUID


public: Geo::GeoGuidGEO_CALL GetInputWorkspaceGUID
(
    const Enlighten::RadCubeMapCore * coreData,
    Geo::s32 index
)


Returns the GUID of a specific entry in the expected input lighting buffer list.

Parameters
[in] coreData

The core data to query.

[in] index

The index of the system to query. Must be >= 0 and less than the length returned by GetInputWorkspaceListLength.


Geo::GeoGuid GEO_CALL Enlighten::GetInputWorkspaceGUID


public: Geo::GeoGuidGEO_CALL GetInputWorkspaceGUID
(
    const Enlighten::RadProbeSetCore * coreData,
    Geo::s32 index
)


Returns the GUID of a specific entry in the expected input lighting buffer list.

Parameters
[in] coreData

The core data to query.

[in] index

The index of the system to query. Must be >= 0 and less than the length returned by GetInputWorkspaceListLength.


Geo::GeoGuid GEO_CALL Enlighten::GetInputWorkspaceGUID


public: Geo::GeoGuidGEO_CALL GetInputWorkspaceGUID
(
    const Enlighten::RadSystemCore * coreData,
    Geo::s32 index
)


Returns the GUID of a specific entry in the expected input lighting buffer list.

Parameters
[in] coreData

The core data to query.

[in] index

The index of the system to query. Must be >= 0 and less than the length returned by GetInputWorkspaceListLength.


Geo::GeoGuid GEO_CALL Enlighten::GetInputWorkspaceGUID


public: Geo::GeoGuidGEO_CALL GetInputWorkspaceGUID
(
    const Enlighten::RadDataBlock * dataBlock,
    Geo::s32 index
)


Returns the GUID of a specific entry in the expected input lighting buffer list.

Parameters
[in] dataBlock

The precomputed data block for the task. This should be RadSystemCore::m_RadiosityPrecomp (for RadIrradianceTask); RadProbeSetCore::m_ProbeSetPrecomp (for RadProbeTask); RadProbeSetCore::m_EntireProbeSetPrecomp (for EntireProbeSetTask; or RadCubeMapCore::m_ClusterCubeMapPrecomp (for RadCubeMapTask).

[in] index

The index of the system to query. Must be >= 0 and less than the length returned by GetInputWorkspaceListLength.

Returns

The GUID of the entry, or GeoGuid::Invalid if out of range, or input invaild.


Geo::s32 GEO_CALL Enlighten::GetInputWorkspaceListLength


public: Geo::s32GEO_CALL GetInputWorkspaceListLength
(
    const Enlighten::RadDataBlock * dataBlock
)


Returns the length of the input lighting buffer list expected when solving radiosity using this core data.

E.g. the number of pointers in m_InputLighting in RadIrradianceTask, RadProbeTask, EntireProbeSetTask or RadCubeMapTask.

Parameters
Returns

The length of the input lighting buffer list, or -1 if the input is invalid.


Geo::s32 GEO_CALL Enlighten::GetInputWorkspaceListLength


public: Geo::s32GEO_CALL GetInputWorkspaceListLength
(
    const Enlighten::RadSystemCore * coreSystem
)


Returns the length of the input lighting buffer list expected when solving radiosity using this core data.

E.g. the number of pointers in m_InputLighting in RadIrradianceTask, or RadProbeTask. (In older versions of the API, the input lighting data was part of the input workspace object, which has resulted in some confusing terminology.)


Geo::s32 GEO_CALL Enlighten::GetInputWorkspaceListLength


public: Geo::s32GEO_CALL GetInputWorkspaceListLength
(
    const Enlighten::RadCubeMapCore * coreCubeMap
)


Returns the length of the input lighting buffer list expected when solving radiosity using this core data.

E.g. the number of pointers in m_InputLighting in RadIrradianceTask, or RadProbeTask. (In older versions of the API, the input lighting data was part of the input workspace object, which has resulted in some confusing terminology.)


Geo::s32 GEO_CALL Enlighten::GetInputWorkspaceListLength


public: Geo::s32GEO_CALL GetInputWorkspaceListLength
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the length of the input lighting buffer list expected when solving radiosity using this core data.

E.g. the number of pointers in m_InputLighting in RadIrradianceTask, or RadProbeTask. (In older versions of the API, the input lighting data was part of the input workspace object, which has resulted in some confusing terminology.)


Geo::s32 GEO_CALL Enlighten::GetNumOctreeNodes


public: Geo::s32GEO_CALL GetNumOctreeNodes
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the number of octree nodes within the specified octree probe set.


Geo::s32 GEO_CALL Enlighten::GetNumVirtualProbes


public: Geo::s32GEO_CALL GetNumVirtualProbes
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the number of virtual probes within the specified probe set.


const Geo::u64* GEO_CALL Enlighten::GetOctreeEnvironmentVisibility


public: const Geo::u64 *GEO_CALL GetOctreeEnvironmentVisibility
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the array of environment visibilities within the specified octree probe.


Enlighten::eSHOrder GEO_CALL Enlighten::GetOctreeEnvironmentVisibilityShOrder


public: Enlighten::eSHOrderGEO_CALL GetOctreeEnvironmentVisibilityShOrder
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the SH order for environment visibility of this octree probe set.


PppiGroupedSize GEO_CALL Enlighten::GetOctreeInterpolatedProbeCounts


public: PppiGroupedSize GEO_CALL GetOctreeInterpolatedProbeCounts
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the number of interpolated probes within the specified octree probe set.


const Geo::u16* GEO_CALL Enlighten::GetOctreeInterpolatedProbeIndices


public: const Geo::u16 *GEO_CALL GetOctreeInterpolatedProbeIndices
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the array of interpolated probe indices within the specified octree probe set.


const Geo::u32* GEO_CALL Enlighten::GetOctreeInterpolatedProbeWidths


public: const Geo::u32 *GEO_CALL GetOctreeInterpolatedProbeWidths
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the array of interpolated probe widths within the specified octree probe set.


Geo::u32 GEO_CALL Enlighten::GetOctreeLevel


public: Geo::u32GEO_CALL GetOctreeLevel
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the level with the probe set hierarchy of this octree probe set.


PppiGroupedSize GEO_CALL Enlighten::GetOctreeNodeCounts


public: PppiGroupedSize GEO_CALL GetOctreeNodeCounts
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the number of octree nodes within the specified octree probe set.


const Enlighten::ProbeSetOctreeNode* GEO_CALL Enlighten::GetOctreeNodes


public: const Enlighten::ProbeSetOctreeNode *GEO_CALL GetOctreeNodes
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the array of octree nodes within the specified octree probe set.


PppiProbeSetFootprint GEO_CALL Enlighten::GetOctreePppiAtlasFootprint


public: PppiProbeSetFootprint GEO_CALL GetOctreePppiAtlasFootprint
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the PPPI atlas footprint of the specified octree probe set.


const Geo::u8* GEO_CALL Enlighten::GetOctreePppiNodes


public: const Geo::u8 *GEO_CALL GetOctreePppiNodes
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the array of octree nodes within the specified octree probe set.


const Geo::u32* GEO_CALL Enlighten::GetOctreeRootProbes


public: const Geo::u32 *GEO_CALL GetOctreeRootProbes
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the root probes in the specified octree probe set.

The lower 2x2x2 entries of the flattened 3x3x3 array contain the 8 corner probes.


PppiGroupedSize GEO_CALL Enlighten::GetOctreeSampledProbeCounts


public: PppiGroupedSize GEO_CALL GetOctreeSampledProbeCounts
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the number of sampled probes within the specified octree probe set.


const Geo::u64* GEO_CALL Enlighten::GetOctreeSampledProbes


public: const Geo::u64 *GEO_CALL GetOctreeSampledProbes
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the array of sampled probes within the specified octree probe set.


PppiGroupedSize GEO_CALL Enlighten::GetOctreeTileCounts


public: PppiGroupedSize GEO_CALL GetOctreeTileCounts
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the number of PPPI indirection tiles within the specified octree probe set.


const Geo::u16* GEO_CALL Enlighten::GetOctreeTileElements


public: const Geo::u16 *GEO_CALL GetOctreeTileElements
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the array of octree tile elements within the specified octree probe set.


float GEO_CALL Enlighten::GetOctreeVoxelSize


public: float GEO_CALL GetOctreeVoxelSize
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns the voxel size used when the specified octree probe set was precomputed.


eSolverType Enlighten::GetOptimisedSolverForPlatform


public: eSolverType GetOptimisedSolverForPlatform
(
    Geo::ePlatform platform
)


Function returning the correct optimised solver based on the compilation environment.


Geo::GeoPoint2D Enlighten::GetOutputTextureSize


public: Geo::GeoPoint2D GetOutputTextureSize
(
    const RadSystemCore & core
)


Returns the size of the output texture required for this radiosity data.


Geo::s32 Enlighten::GetOutputTextureSize


public: Geo::s32 GetOutputTextureSize
(
    const RadCubeMapCore & core
)


Returns the size of the output texture required for this radiosity data.


const float* GEO_CALL Enlighten::GetProbeEnvironmentVisibility


public: const float *GEO_CALL GetProbeEnvironmentVisibility
(
    Geo::s32 probeId,
    const Enlighten::RadProbeSetCore * probeSetCore
)


Retrieves the light probe environment visibility for the given probe in the volume probe data.

The visibility data is encoded as a spherical harmonic with a number of coefficients depending on the precompute settings used to create the probe set. The number of coefficients can be retrieved from the probeSetCore metadata. The visibility pointer must point to a buffer that is large enough to accommodate the coefficients. Returns a pointer to the visibility data, this pointer will be NULL if the environment visibility is disabled or the probe has been culled by the precompute.

Parameters
[in] probeId

The volumetric probe to query.

[in] probeSetCore

The volumetric probe data to query.


bool GEO_CALL Enlighten::GetProbeVisibility


public: bool GEO_CALL GetProbeVisibility
(
    Geo::s32 probeId,
    const Enlighten::RadProbeSetCore * probeSetCore,
    float * visibility
)


Retrieves the light probe visibility for the given probe in the volume probe data.

Returns TRUE on success.

Parameters
[in] probeId

The volumetric probe to query.

[in] probeSetCore

The volumetric probe data to query.

[out] visibility

The volumetric probe visibility.


const Enlighten::ProbeSetVirtualProbe* GEO_CALL Enlighten::GetVirtualProbes


public: const Enlighten::ProbeSetVirtualProbe *GEO_CALL GetVirtualProbes
(
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns a pointer to the array of virtual probes within the specified probe set.

This data can be used to produce the output for virtual probe indices in a single pass. A probe index is virtual when it is greater than the number of probes in the probe set. To find the corresponding index within the virtual probe array, subtract the number of probes in the probe set. The first entry in the array always refers to a pair of real probes. Later entries may be virtual probe indices which refer to virtual probes that appear earlier in the same array.


Geo::u32 GEO_CALL Enlighten::HashInputLightingElements


public: Geo::u32GEO_CALL HashInputLightingElements
(
    const InputLightingBuffer ** inputLightingArray,
    Geo::s32 numBuffers
)


Hash the guids and pointers of the InputLightingBuffer array.

Parameters
[in] inputLightingArray

An array of InputLightingBuffers to hash. This hash included the pointer values.

[in] numBuffers

The number of InputLightingBuffers in the array.

Returns

The hash of the inputs.


GEO_FORCE_INLINE bool GEO_CALL Enlighten::IsFixedPointFormat


public: GEO_FORCE_INLINE bool GEO_CALL IsFixedPointFormat
(
    eOutputFormat format
)


Returns true for formats with a fixed range (0-1).

To retain HDR output the user should set the irradiance scale to a value < 1.0, and scale the output back up in the shader code.


Geo::s32 GEO_CALL Enlighten::IsInputLightingBufferStatic


public: Geo::s32GEO_CALL IsInputLightingBufferStatic
(
    const InputLightingBuffer * lightingBuffer
)


Returns the number of frames since the last update that changed the given input lighting buffer.

Parameters
[in] lightingBuffer

The lighting buffer to check for changes.

Returns

Returns the number of updates since the last change.


bool GEO_CALL Enlighten::IsProbeCulled


public: bool GEO_CALL IsProbeCulled
(
    Geo::s32 probeId,
    const Enlighten::RadProbeSetCore * probeSetCore
)


Returns TRUE if the probe was culled during precompute.

Parameters
[in] probeId

The volumetric probe to query.

[in] probeSetCore

The volumetric probe data to query.


GEO_FORCE_INLINE bool GEO_CALL Enlighten::IsValidOutputFormat


public: GEO_FORCE_INLINE bool GEO_CALL IsValidOutputFormat
(
    Geo::u32 outputFormat
)


Checks if the given output format enumeration is valid.


bool GEO_CALL Enlighten::PrepareInputLightingList


public: bool GEO_CALL PrepareInputLightingList
(
    const Enlighten::RadDataBlock * dataBlock,
    const Enlighten::InputLightingBuffer ** inputLightingBuffers,
    Geo::s32 numLightingBuffers,
    const Enlighten::InputLightingBuffer ** listILBOut
)


Places the unordered list of lighting buffers into the correct order for the solver.

RadIrradianceTask, RadProbeTask, EntireProbeSetTask and RadCubeMapTask all expect a pointer to an ordered


list of input lighting buffers. This saves the overhead of sorting and searching for systems inside each call. In most situations, it will be possible to call this function once and cache the results for repeated use over many frames. A new list will be required only when systems are allocated (loaded) or deallocated (unloaded).

Parameters
[in] dataBlock

The precomputed data block for the task. This should be RadSystemCore::m_RadiosityPrecomp (for RadIrradianceTask); RadProbeSetCore::m_ProbeSetPrecomp (for RadProbeTask); RadProbeSetCore::m_EntireProbeSetPrecomp (for EntireProbeSetTask; or RadCubeMapCore::m_ClusterCubeMapPrecomp (for RadCubeMapTask).

[in] inputLightingBuffers

The unordered list of lighting buffers.

[in] numLightingBuffers

The number of lighting buffers provided.

[in] listILBOut

The location to write the new list to. This array of pointers must be the length returned by GetInputWorkspaceListLength().


bool GEO_CALL Enlighten::PrepareInputLightingList


public: bool GEO_CALL PrepareInputLightingList
(
    const Enlighten::RadProbeSetCore * coreData,
    const Enlighten::InputLightingBuffer ** inputLightingBuffers,
    Geo::s32 numLightingBuffers,
    const Enlighten::InputLightingBuffer ** listILBOut
)


Places the unordered list of lighting buffers into the correct order for the solver.

RadIrradianceTask, RadProbeTask and RadCubeMapTask all expect a pointer to an ordered


list of input lighting buffers. This saves the overhead of sorting and searching for systems inside each call. In most situations, it will be possible to call this function once and cache the results for repeated use over many frames. A new list will be required only when systems are allocated (loaded) or deallocated (unloaded).

Parameters
[in] coreData

The core data to prepare the input list for.

[in] inputLightingBuffers

The unordered list of lighting buffers.

[in] numLightingBuffers

The number of lighting buffers provided.

[in] listILBOut

The location to write the new list to. This array of pointers must be the length returned by GetInputWorkspaceListLength().


bool GEO_CALL Enlighten::PrepareInputLightingList


public: bool GEO_CALL PrepareInputLightingList
(
    const Enlighten::RadSystemCore * coreData,
    const Enlighten::InputLightingBuffer ** inputLightingBuffers,
    Geo::s32 numLightingBuffers,
    const Enlighten::InputLightingBuffer ** listILBOut
)


Places the unordered list of lighting buffers into the correct order for the solver.

RadIrradianceTask, RadProbeTask and RadCubeMapTask all expect a pointer to an ordered


list of input lighting buffers. This saves the overhead of sorting and searching for systems inside each call. In most situations, it will be possible to call this function once and cache the results for repeated use over many frames. A new list will be required only when systems are allocated (loaded) or deallocated (unloaded).

Parameters
[in] coreData

The core data to prepare the input list for.

[in] inputLightingBuffers

The unordered list of lighting buffers.

[in] numLightingBuffers

The number of lighting buffers provided.

[in] listILBOut

The location to write the new list to. This array of pointers must be the length returned by GetInputWorkspaceListLength().


bool GEO_CALL Enlighten::PrepareInputLightingList


public: bool GEO_CALL PrepareInputLightingList
(
    const Enlighten::RadCubeMapCore * coreData,
    const Enlighten::InputLightingBuffer ** inputLightingBuffers,
    Geo::s32 numLightingBuffers,
    const Enlighten::InputLightingBuffer ** listILBOut
)


Places the unordered list of lighting buffers into the correct order for the solver.

RadIrradianceTask, RadProbeTask and RadCubeMapTask all expect a pointer to an ordered


list of input lighting buffers. This saves the overhead of sorting and searching for systems inside each call. In most situations, it will be possible to call this function once and cache the results for repeated use over many frames. A new list will be required only when systems are allocated (loaded) or deallocated (unloaded).

Parameters
[in] coreData

The core data to prepare the input list for.

[in] inputLightingBuffers

The unordered list of lighting buffers.

[in] numLightingBuffers

The number of lighting buffers provided.

[in] listILBOut

The location to write the new list to. This array of pointers must be the length returned by GetInputWorkspaceListLength().


bool GEO_CALL Enlighten::ResampleBounce


public: bool GEO_CALL ResampleBounce
(
    const Enlighten::ResampleBounceParameters & params,
    Geo::u32 & timeUs
)


After SolveIrradianceTask is run, the ResampleBounce() function populates an Enlighten::BounceBuffer with bounce data.

This BounceBuffer is then used as input to the IndirectInputLighting stage for the next solve iteration.

Parameters
[in] params

A complete and valid ResampleBounceParameters

[out] timeUs

Number of microseconds it took to Resample the bounce


void GEO_CALL Enlighten::SetForceDisableFma4


public: void GEO_CALL SetForceDisableFma4
(
    bool disableFma4
)


Set whether to force disable FMA4 support.

This only affects the SSE solver, and has no effect on other architectures. By default, if FMA4 support is detected in the hardware and OS it will be used by the solver. This function allows you to override the automatic detection and force FMA4 support off. There is no way to force it on if Enlighten cannot detect it.


bool GEO_CALL Enlighten::SolveBounceBufferTask


public: bool GEO_CALL SolveBounceBufferTask
(
    const Enlighten::SolveBounceTask * task,
    void * workspace,
    Geo::u32 & timeUs,
    Geo::u32 & numSolvedClusters
)


Solve the radiosity directly to a bounce buffer only.

This does not update the lightmap. All parameters must be valid non-null objects.

Parameters
[in] task

A valid pointer to the RadIrradianceTaskLod structure to complete.

[in] workspace

A valid pointer to a block of memory to use as a workspace which must be at least as big as m_RequiredWorkspaceSize in the core meta data.

[out] timeUs

Number of microseconds it took to solve the task.

[out] numSolvedClusters

Number of output pixels solved in the task.


bool GEO_CALL Enlighten::SolveCubeMapTask


public: bool GEO_CALL SolveCubeMapTask
(
    const Enlighten::RadCubeMapTask * task,
    void * workspace,
    Geo::u32 & timeUs,
    Geo::u32 & numSolvedPixels
)


Solve the specified cube map task using a given workspace.

Returns TRUE on success. All parameters must be valid non-null objects.

Parameters
[in] task

A valid pointer to the cube map task structure to complete.

[in] workspace

A valid pointer to a block of memory to use as a workspace which must be at least as big as the amount returned from CalcRequiredWorkspaceMemory().

[out] timeUs

Number of microseconds it took to solve the task.

[out] numSolvedPixels

Number of output pixels solved in the task.


bool GEO_CALL Enlighten::SolveEntireProbeSetTask


public: bool GEO_CALL SolveEntireProbeSetTask
(
    const Enlighten::EntireProbeSetTask * task,
    void * workspace,
    Geo::u32 & timeUs,
    Geo::u32 & numSolvedProbes
)


Solve the specified EntireProbeSetTask.


bool GEO_CALL Enlighten::SolveIrradianceTask


public: bool GEO_CALL SolveIrradianceTask
(
    const Enlighten::RadIrradianceTask * task,
    void * workspace,
    Geo::u32 & timeUs,
    Geo::u32 & numSolvedPixels
)


Solve the specified irradiance task using a given workspace.

Returns TRUE on success. All parameters must be valid non-null objects.

Parameters
[in] task

A valid pointer to the irradiance task structure to complete.

[in] workspace

A valid pointer to a block of memory to use as a workspace which must be at least as big as m_RequiredWorkspaceSize in the core meta data.

[out] timeUs

Number of microseconds it took to solve the task.

[out] numSolvedPixels

Number of output pixels solved in the task.


bool GEO_CALL Enlighten::SolveProbeTaskL1


public: bool GEO_CALL SolveProbeTaskL1
(
    const Enlighten::RadProbeTask * task,
    Geo::u32 & timeUs
)


Solve the specified L1 probe task.

Returns TRUE on success. Returns FALSE if the input task is precomputed as L2.

Parameters
[in] task

A valid pointer to the probe task structure to complete.

[out] timeUs

Returns the number of microseconds taken to perform the compute


bool GEO_CALL Enlighten::SolveProbeTaskL2


public: bool GEO_CALL SolveProbeTaskL2
(
    const Enlighten::RadProbeTask * task,
    Geo::u32 & timeUs
)


Solve the specified L2 probe task.

Returns TRUE on success. Returns FALSE if the input task is precomputed as L1.

Parameters
[in] task

A valid pointer to the probe task structure to complete.

[out] timeUs

Returns the number of microseconds taken to perform the compute


eCubemapFilterMode


public: enum eCubemapFilterMode
{
    CUBEMAP_FILTER_NONE = 0,
    CUBEMAP_FILTER_BOX = 1,
    CUBEMAP_FILTER_UNREAL = 2,
    NUM_CUBEMAP_FILTER_MODES
}


Enumeration of the different types of cubemap mip filter.

enumerators
CUBEMAP_FILTER_NONE

Enlighten do not generate any mipmaps.

CUBEMAP_FILTER_BOX

Box filter within each face (DX9). Not compatible with PBR. Seams at face boundaries.

CUBEMAP_FILTER_UNREAL

Trowbridge-Reitz (GGX) filter. Up to 2x the cost of box filter. Compatible with Unreal Engine PBR renderer.

NUM_CUBEMAP_FILTER_MODES


eOutputFormat


public: enum eOutputFormat
{
    OUTPUT_FORMAT_FP16 = 0,
    OUTPUT_FORMAT_LRB = 2,
    OUTPUT_FORMAT_R11G11B10 = 4,
    OUTPUT_FORMAT_R9G9B9E5 = 5,
    OUTPUT_FORMAT_RGBM = 6,
    OUTPUT_FORMAT_DIRECT_TO_BOUNCE = 7,
    NUM_OUTPUT_FORMATS
}


Output formats.

enumerators
OUTPUT_FORMAT_FP16

16-bits-per-pixel-per-channel floating point (D3DFMT_A16B16G16R16F; 8 byte per pixel).

OUTPUT_FORMAT_LRB

16 bit fixed point luminance; 8 bit red and blue (D3DFMT_A8R8G8B8; 4 byte per pixel).

OUTPUT_FORMAT_R11G11B10

Floating point, 11 bits per channel R and G, with 10 bit B. Identical to DX11 format DXGI_FORMAT_R11G11B10_FLOAT (http://msdn.microsoft.com/en-gb/library/windows/desktop/bb173059(v=vs.85).aspx)

OUTPUT_FORMAT_R9G9B9E5

Floating point, 9 bits per channel mantissa with shared 5 bit exponent. Identical to DX11 format DXGI_FORMAT_R9G9B9E5_SHAREDEXP (http://msdn.microsoft.com/en-gb/library/windows/desktop/bb173059(v=vs.85).aspx)

OUTPUT_FORMAT_RGBM

8 bit fixed point red, green and blue, with an 8 bit multiplier.

OUTPUT_FORMAT_DIRECT_TO_BOUNCE

Format used internally for solving direct to the bounce buffer.

NUM_OUTPUT_FORMATS


eOutputFormatByteOrder


public: enum eOutputFormatByteOrder
{
    OUTPUT_FORMAT_BYTE_ORDER_BGRA = 0,
    OUTPUT_FORMAT_BYTE_ORDER_RGBA = 1
}


To support both DX9 and DX11 rendering with the same shader code, the solve functions can output 8-bit-per-pixel texture data in either byte order.

This applies to the directional output texture and to irradiance or cube map textures in LRB format. This enum only affects the SSE, NEON and reference solvers.

enumerators
OUTPUT_FORMAT_BYTE_ORDER_BGRA

Write 8-bit-per-pixel textures in BGRA (DX9) byte order.

OUTPUT_FORMAT_BYTE_ORDER_RGBA

Write 8-bit-per-pixel textures in RGBA (DX11) byte order.


eProbeOutputFormat


public: enum eProbeOutputFormat
{
    PROBE_OUTPUT_FORMAT_FP16 = 0,
    PROBE_OUTPUT_FORMAT_FP32 = 1,
    NUM_PROBE_OUTPUT_FORMATS = 2
}


Probe Interpolation output formats.

enumerators
PROBE_OUTPUT_FORMAT_FP16

16-bits-per-pixel-per-channel floating point.

PROBE_OUTPUT_FORMAT_FP32

32-bits-per-pixel-per-channel floating point.

NUM_PROBE_OUTPUT_FORMATS

Number of available output formats.


eRadDataType


public: enum eRadDataType
{
    RDT_INVALID = 0,
    RDT_RAD_CORE = 1,
    RDT_RAD_PROJECTION_DATA = 2,
    RDT_INPUT_WORKSPACE = 4,
    RDT_PROBE_SET_CORE = 5,
    RDT_CAW_CLUSTER_MATERIALS = 6,
    RDT_TAW_MATERIAL_RUNS = 7,
    RDT_AW_MATERIAL_GUIDS = 8,
    RDT_INPUT_LIGHTING_BUFFER = 9,
    RDT_RAD_CUBE_MAP_CORE = 10,
    RDT_INPUT_PROJECTED_POINTS = 15,
    RDT_INPUT_SOURCE_MESH_DATA = 16,
    RDT_PROBE_SET_OCTREE = 17,
    RDT_PROBE_SET_INTERPOLATION = 18,
    RDT_PROBE_SET_VISIBILITY = 19,
    RDT_PROBE_SET_OCTREE_VISIBILITY = 20,
    RDT_INPUT_HQ_BOUNCE_COORDINATES = 21,
    RDT_INPUT_CLUSTER_PROBE_OFFSETS = 22,
    RDT_ENTIRE_PROBE_SET_CORE = 24,
    RDT_CLUSTER_ALBEDO_WORKSPACE = 25,
    RDT_PROBE_SET_DEBUG_DATA = 26,
    RDT_RAD_RESAMPLING_DATA = 27,
    RDT_ALBEDO_BUFFER = 28,
    RDT_EMISSIVE_BUFFER = 29,
    RDT_INCIDENT_LIGHTING_BUFFER = 30,
    RDT_DYNAMIC_MATERIAL_WORKSPACE = 31,
    RDT_TRANSPARENCY_BUFFER = 32,
    RDT_RAD_CORE_BOUNCE = 33
}


Valid data types for use with the RadDataBlock class.

enumerators
RDT_INVALID
RDT_RAD_CORE
RDT_RAD_PROJECTION_DATA
RDT_INPUT_WORKSPACE
RDT_PROBE_SET_CORE
RDT_CAW_CLUSTER_MATERIALS
RDT_TAW_MATERIAL_RUNS
RDT_AW_MATERIAL_GUIDS
RDT_INPUT_LIGHTING_BUFFER
RDT_RAD_CUBE_MAP_CORE
RDT_INPUT_PROJECTED_POINTS
RDT_INPUT_SOURCE_MESH_DATA
RDT_PROBE_SET_OCTREE
RDT_PROBE_SET_INTERPOLATION
RDT_PROBE_SET_VISIBILITY
RDT_PROBE_SET_OCTREE_VISIBILITY
RDT_INPUT_HQ_BOUNCE_COORDINATES
RDT_INPUT_CLUSTER_PROBE_OFFSETS
RDT_ENTIRE_PROBE_SET_CORE
RDT_CLUSTER_ALBEDO_WORKSPACE
RDT_PROBE_SET_DEBUG_DATA
RDT_RAD_RESAMPLING_DATA
RDT_ALBEDO_BUFFER
RDT_EMISSIVE_BUFFER
RDT_INCIDENT_LIGHTING_BUFFER
RDT_DYNAMIC_MATERIAL_WORKSPACE
RDT_TRANSPARENCY_BUFFER
RDT_RAD_CORE_BOUNCE


eSHOrder


public: enum eSHOrder
{
    SH_ORDER_DISABLED = 0,
    SH_ORDER_L0 = 1,
    SH_ORDER_L1 = 4,
    SH_ORDER_L2 = 9
}


Supported Spherical Harmonic types.

enumerators
SH_ORDER_DISABLED

disabled spherical harmonic

SH_ORDER_L0

L=0 spherical harmonics (DC component only)

SH_ORDER_L1

L=1 spherical harmonics.

SH_ORDER_L2

L=2 spherical harmonics.


eSolverType


public: enum eSolverType
{
    SOLVER_REFERENCE = 0,
    SOLVER_SSE = 1,
    SOLVER_NEON = 5
}


Valid solver types for use with the RadDataBlock class.

enumerators
SOLVER_REFERENCE

All reference solvers.

SOLVER_SSE

SSE2+ compatible architecture (usually a Windows PC)

SOLVER_NEON

ARM NEON (most iOS and Android)