Class AssetLoaderContext
Serves as the central context for managing a model loading operation in TriLib. This class stores references to the loaded objects (GameObjects, textures, materials), user options, callbacks, and intermediate state (e.g., asynchronous tasks, in-flight texture loads).
Inherited Members
Namespace: TriLibCore
Assembly: TriLibCore.dll
Syntax
public class AssetLoaderContext : IAssetLoaderContext, IAwaitable
Constructors
AssetLoaderContext()
Declaration
public AssetLoaderContext()
Fields
Allocations
A list of Unity objects (e.g., UnityEngine.Texture2D, UnityEngine.Material, UnityEngine.Mesh) that have been allocated during the model loading process.
Declaration
public readonly List<Object> Allocations
Field Value
Type | Description |
---|---|
List<Object> |
AppliedDoubleSidedMaterials
Indicates whether double-sided materials (i.e., materials requiring backside rendering) were applied to the last processed mesh. This can help track special mesh rendering states.
Declaration
public bool AppliedDoubleSidedMaterials
Field Value
Type | Description |
---|---|
bool |
Async
If true
, the model loads asynchronously whenever possible. If false
,
TriLib forces a synchronous approach. This affects how tasks and threads are used.
Declaration
public bool Async
Field Value
Type | Description |
---|---|
bool |
BasePath
The directory or base path from which the model or resources are loaded. Used for finding external textures or other data.
Declaration
public string BasePath
Field Value
Type | Description |
---|---|
string |
CancellationToken
A token used to manage the timeout or cancellation of the loading process. If triggered, loading tasks are halted before completion.
Declaration
public CancellationToken CancellationToken
Field Value
Type | Description |
---|---|
CancellationToken |
CancellationTokenSource
A source object that can be invoked to cancel model loading manually (e.g., by user input). Cancels tasks reliant on CancellationToken.
Declaration
public CancellationTokenSource CancellationTokenSource
Field Value
Type | Description |
---|---|
CancellationTokenSource |
CustomData
Arbitrary user-defined data or metadata attached to this context. This object can store additional loading parameters, usage info, or placeholders needed by custom logic.
Declaration
public object CustomData
Field Value
Type | Description |
---|---|
object |
FileExtension
When loading from a stream rather than a local file, this stores the file extension (e.g., "fbx", "gltf") so TriLib can determine an appropriate reader or parser.
Declaration
public string FileExtension
Field Value
Type | Description |
---|---|
string |
Filename
When loading from the local file system, this indicates the path or filename to load. This may be combined with BasePath for resource lookups.
Declaration
public string Filename
Field Value
Type | Description |
---|---|
string |
GameObjectPaths
A mapping between created UnityEngine.GameObjects and their hierarchy paths within the loaded model (e.g., “Root/Mesh001”). This is useful for tracking or debugging the final hierarchy after import.
Declaration
public readonly Dictionary<GameObject, string> GameObjectPaths
Field Value
Type | Description |
---|---|
Dictionary<GameObject, string> |
GameObjects
A mapping between TriLib model representations (IModel) and the corresponding UnityEngine.GameObjects created for them in Unity.
Declaration
public readonly Dictionary<IModel, GameObject> GameObjects
Field Value
Type | Description |
---|---|
Dictionary<IModel, GameObject> |
GeneratedMaterials
A thread-safe dictionary mapping TriLib materials (IMaterial) to Unity UnityEngine.Material objects generated on-the-fly. This can be used to look up or reuse already created materials.
Declaration
public readonly ConcurrentDictionary<IMaterial, Material> GeneratedMaterials
Field Value
Type | Description |
---|---|
ConcurrentDictionary<IMaterial, Material> |
HaltTasks
If true
, TriLib defers the actual start of loading tasks, letting the user
or calling code chain multiple tasks or manually schedule the execution.
Declaration
public bool HaltTasks
Field Value
Type | Description |
---|---|
bool |
HandleError
A delegate for internal error handling, invoked before OnError. This allows additional checks or logging prior to the user-facing error callback.
Declaration
public Action<IContextualizedError> HandleError
Field Value
Type | Description |
---|---|
Action<IContextualizedError> |
IsZipFile
If true
, indicates that the current loading operation involves a .zip file,
requiring AssetLoaderZip or related logic to decompress and parse contents.
Declaration
public bool IsZipFile
Field Value
Type | Description |
---|---|
bool |
LoadedCompoundTextures
A thread-safe dictionary storing compound textures keyed by a CompoundTextureKey, which represents the texture plus its usage type (e.g., diffuse, normal, metallic). Each entry references the TextureLoadingContext used to load that texture.
Declaration
public readonly ConcurrentDictionary<CompoundTextureKey, TextureLoadingContext> LoadedCompoundTextures
Field Value
Type | Description |
---|---|
ConcurrentDictionary<CompoundTextureKey, TextureLoadingContext> |
LoadedExternalData
A thread-safe dictionary that maps shortened external resource filenames to their fully resolved paths on disk or elsewhere.
Declaration
public readonly ConcurrentDictionary<string, string> LoadedExternalData
Field Value
Type | Description |
---|---|
ConcurrentDictionary<string, string> |
LoadedMaterials
A thread-safe dictionary linking TriLib materials (IMaterial) to the generated Unity UnityEngine.Material objects. This complements GeneratedMaterials in storing final user-facing materials.
Declaration
public readonly ConcurrentDictionary<IMaterial, Material> LoadedMaterials
Field Value
Type | Description |
---|---|
ConcurrentDictionary<IMaterial, Material> |
LoadedTextures
A thread-safe dictionary mapping TriLib textures (ITexture) to their TextureLoadingContext results, used to prevent redundant texture loading and allow reuse where possible.
Declaration
public readonly ConcurrentDictionary<ITexture, TextureLoadingContext> LoadedTextures
Field Value
Type | Description |
---|---|
ConcurrentDictionary<ITexture, TextureLoadingContext> |
LoadingProgress
Tracks the overall progress of model loading (a float between 0 and 1).
Declaration
public float LoadingProgress
Field Value
Type | Description |
---|---|
float |
LoadingStep
Represents the loading step (an integer) for more granular tracking of progress (e.g., reading geometry, loading textures, building materials).
Declaration
public int LoadingStep
Field Value
Type | Description |
---|---|
int |
MaterialRenderers
A thread-safe dictionary linking TriLib materials (IMaterial) to their MaterialRendererContext objects, which contain references to the Unity renderer and geometry data needing that material.
Declaration
public readonly ConcurrentDictionary<IMaterial, List<MaterialRendererContext>> MaterialRenderers
Field Value
Type | Description |
---|---|
ConcurrentDictionary<IMaterial, List<MaterialRendererContext>> |
MaterialTextures
A thread-safe dictionary linking a CompoundMaterialKey (material + texture type) to the loaded TextureLoadingContext. This ensures that a texture used in multiple material slots is loaded or referenced consistently.
Declaration
public readonly ConcurrentDictionary<CompoundMaterialKey, TextureLoadingContext> MaterialTextures
Field Value
Type | Description |
---|---|
ConcurrentDictionary<CompoundMaterialKey, TextureLoadingContext> |
Models
A mapping between UnityEngine.GameObjects created during loading and the corresponding TriLib IModel representations (e.g., for referencing raw geometry data).
Declaration
public readonly Dictionary<GameObject, IModel> Models
Field Value
Type | Description |
---|---|
Dictionary<GameObject, IModel> |
ModificationDate
Potentially stores a file modification date or version retrieved by format-specific data. This may be used for caching or informational displays.
Declaration
public string ModificationDate
Field Value
Type | Description |
---|---|
string |
OnError
A callback invoked on the main thread if an error occurs during loading. Often used to notify the user or perform cleanup tasks.
Declaration
public Action<IContextualizedError> OnError
Field Value
Type | Description |
---|---|
Action<IContextualizedError> |
OnLoad
A callback invoked once the model’s core structure is loaded, but possibly before all textures and materials finish processing. This occurs on the main thread.
Declaration
public Action<AssetLoaderContext> OnLoad
Field Value
Type | Description |
---|---|
Action<AssetLoaderContext> |
OnMaterialsLoad
A callback invoked once the model and all relevant resources (e.g., textures, materials, animations) have finished loading. Called on the main thread.
Declaration
public Action<AssetLoaderContext> OnMaterialsLoad
Field Value
Type | Description |
---|---|
Action<AssetLoaderContext> |
OnPreLoad
A callback invoked on a background thread, providing a chance to manipulate or inspect data before Unity UnityEngine.GameObjects are instantiated (only when multi-threading is enabled).
Declaration
public Action<AssetLoaderContext> OnPreLoad
Field Value
Type | Description |
---|---|
Action<AssetLoaderContext> |
OnProgress
A callback that reports loading progress changes, providing both the current AssetLoaderContext and a float progress value (0–1).
Declaration
public Action<AssetLoaderContext, float> OnProgress
Field Value
Type | Description |
---|---|
Action<AssetLoaderContext, float> |
Options
The AssetLoaderOptions governing how the model is imported (e.g., whether to generate colliders, import animations, or apply custom material mappers).
Declaration
public AssetLoaderOptions Options
Field Value
Type | Description |
---|---|
AssetLoaderOptions |
PreviousLoadingStep
Tracks the previously reported loading step, aiding in detecting changes for
incremental updates or logging. Defaults to -1
to indicate uninitialized.
Declaration
public int PreviousLoadingStep
Field Value
Type | Description |
---|---|
int |
Reader
References the internal ReaderBase that’s parsing or converting the file.
Specific implementations (e.g., FBXReader
, GltfReader
) fill in data
for geometry, bones, and materials.
Declaration
public ReaderBase Reader
Field Value
Type | Description |
---|---|
ReaderBase |
RootGameObject
The UnityEngine.GameObject representing the top-level node of the loaded model. Contains or references all other child meshes, transforms, and data.
Declaration
public GameObject RootGameObject
Field Value
Type | Description |
---|---|
GameObject |
RootModel
An interface representing the root model structure (IRootModel) of the loaded file. It can contain sub-models, materials, animations, etc.
Declaration
public IRootModel RootModel
Field Value
Type | Description |
---|---|
IRootModel |
Stream
The Stream used to load the model if loading from memory or network data rather than a filesystem path.
Declaration
public Stream Stream
Field Value
Type | Description |
---|---|
Stream |
Task
A reference to the main Task used for the loading operation (if asynchronous). This allows for concurrency and non-blocking behavior during model import.
Declaration
public Task Task
Field Value
Type | Description |
---|---|
Task |
Tasks
A list of Task instances related to this loading operation, used to manage parallel or sequential tasks (texture loading, post-processing, etc.).
Declaration
public List<Task> Tasks
Field Value
Type | Description |
---|---|
List<Task> |
TexturesWithAlphaChecked
Tracks whether particular UnityEngine.Texture objects have already been checked for alpha channels, avoiding repeated checks or overhead.
Declaration
public readonly Dictionary<Texture, bool> TexturesWithAlphaChecked
Field Value
Type | Description |
---|---|
Dictionary<Texture, bool> |
UsedTextures
Keeps a set of textures that have been successfully applied to renderers, which helps differentiate between used and unused textures (for optional discarding of unused ones).
Declaration
public readonly HashSet<Texture> UsedTextures
Field Value
Type | Description |
---|---|
HashSet<Texture> |
WrapperGameObject
A user-specified or automatically created UnityEngine.GameObject that serves as the parent object for the entire loaded model hierarchy.
Declaration
public GameObject WrapperGameObject
Field Value
Type | Description |
---|---|
GameObject |
Properties
Completed
If true
, indicates that the model loading process has finished,
including asynchronous tasks. If false
, the pipeline is still in progress.
Declaration
public bool Completed { get; set; }
Property Value
Type | Description |
---|---|
bool |
CustomDispatcherQueue
A queue holding context-specific actions that can be dispatched on the main thread or processed in other contexts. Useful for advanced customization or specialized event scheduling.
Declaration
public Queue<IContextualizedAction> CustomDispatcherQueue { get; }
Property Value
Type | Description |
---|---|
Queue<IContextualizedAction> |
PersistentDataPath
The Application.persistentDataPath
or another user-defined path
for storing or retrieving extracted or cached resources (e.g., embedded textures).
Declaration
public string PersistentDataPath { get; set; }
Property Value
Type | Description |
---|---|
string |
Methods
AddMaterialTexture(TextureLoadingContext)
Records a newly loaded texture’s context in MaterialTextures to track the usage of that texture by a specific material/slot combination.
Declaration
public void AddMaterialTexture(TextureLoadingContext textureLoadingContext)
Parameters
Type | Name | Description |
---|---|---|
TextureLoadingContext | textureLoadingContext | The TextureLoadingContext holding the TriLib texture and additional metadata. |
AddUsedTexture(Texture)
Marks a UnityEngine.Texture as used by at least one renderer or material, so TriLib knows not to discard it when cleaning up unused allocations.
Declaration
public void AddUsedTexture(Texture texture)
Parameters
Type | Name | Description |
---|---|---|
Texture | texture | The texture being used by a model’s material. |
DiscardUnusedTextures()
Removes any UnityEngine.Texture that isn’t referenced in UsedTextures from the Allocations list and destroys it, freeing memory. Useful if your model has optional or generated textures that are never applied.
Declaration
public void DiscardUnusedTextures()
ReleaseMainThread()
Yields execution back to Unity if UseCoroutines is enabled, preventing long blocking operations on the main thread. Exits immediately if coroutines are disabled.
Declaration
public IEnumerable ReleaseMainThread()
Returns
Type | Description |
---|---|
IEnumerable | An IEnumerable that yields once if the elapsed time since the last yield exceeded MaxCoroutineDelayInMS, otherwise yields nothing. |
Setup()
Performs initial setup for this loader context, such as preparing a Stopwatch for timing coroutine yields if UseCoroutines is true.
Declaration
public void Setup()
TryGetCompoundTexture(TextureLoadingContext, out TextureLoadingContext)
Checks whether a texture with the specified TextureLoadingContext already exists in LoadedCompoundTextures. If found, reuses the existing data to avoid duplicating memory or I/O.
Declaration
public bool TryGetCompoundTexture(TextureLoadingContext textureLoadingContext, out TextureLoadingContext existingTextureLoadingContext)
Parameters
Type | Name | Description |
---|---|---|
TextureLoadingContext | textureLoadingContext | Contains references to the TriLib texture, texture type, and the pipeline context. |
TextureLoadingContext | existingTextureLoadingContext | An output parameter set to the found TextureLoadingContext, if any. |
Returns
Type | Description |
---|---|
bool |
|
TryGetLoadedTexture(TextureLoadingContext, out TextureLoadingContext)
Checks whether the specified TriLib ITexture is already listed in LoadedTextures. If found, reuses its TextureLoadingContext so no redundant loading is performed.
Declaration
public bool TryGetLoadedTexture(TextureLoadingContext textureLoadingContext, out TextureLoadingContext existingTextureLoadingContext)
Parameters
Type | Name | Description |
---|---|---|
TextureLoadingContext | textureLoadingContext | Contains the TriLib texture reference. |
TextureLoadingContext | existingTextureLoadingContext | Output parameter set to the found TextureLoadingContext, if any. |
Returns
Type | Description |
---|---|
bool |
|
TryGetMaterialTexture(IMaterial, TextureType, out Texture)
Searches for a processed texture (already loaded and stored) based on the given material and texture type.
If found, sets loadedTexture
and returns true
.
Declaration
public bool TryGetMaterialTexture(IMaterial material, TextureType textureType, out Texture loadedTexture)
Parameters
Type | Name | Description |
---|---|---|
IMaterial | material | The source TriLib material. |
TextureType | textureType | A TextureType indicating diffuse, normal, etc. |
Texture | loadedTexture | The Unity UnityEngine.Texture that was found, or |
Returns
Type | Description |
---|---|
bool |
|
TryRegisterTexture(TextureLoadingContext)
Called to register a new TextureLoadingContext or reuse an existing one if the same texture reference is found. This avoids duplicate loads and ensures consistent texture usage across multiple materials or submeshes.
Declaration
public void TryRegisterTexture(TextureLoadingContext textureLoadingContext)
Parameters
Type | Name | Description |
---|---|---|
TextureLoadingContext | textureLoadingContext | The TextureLoadingContext describing the texture, type, and pipeline context. |