Cogs.Core
Public Member Functions | Public Attributes | List of all members
Cogs::Core::MaterialManager Class Reference

Material manager handling loading and processing of Material resources. More...

#include <MaterialManager.h>

Inheritance diagram for Cogs::Core::MaterialManager:
Cogs::Core::ResourceManager< Material, MaterialLoadInfo > Cogs::Core::ResourceManagerBase Cogs::Core::IResourceManager

Public Member Functions

 MaterialManager (Context *context)
 Constructs a MaterialManager in the given context.
 
 ~MaterialManager ()
 Destructs the MaterialManager.
 
void clear () override
 Override clear to do nothing as we let loaded materials persists through clears.
 
void releaseAll ()
 Clear out all materials, done as part of shutdown process.
 
void initializeDefaultMaterial ()
 Initializes the MaterialManager, setting up the default material.
 
MaterialHandle getDefaultMaterial ()
 Get the default material.
 
MaterialHandle getMaterial (const StringView &name)
 
MaterialHandle loadMaterial (const StringView &fileName, MaterialLoadFlags materialLoadFlags=MaterialLoadFlags::None, ResourceId resourceId=NoResourceId)
 Loads a Material from the given fileName.
 
void handleLoad (MaterialLoadInfo *loadInfo) override
 Overridden to handle loading of Material resources.
 
void handleReload (ResourceHandleBase handle) override
 
bool setupMaterial (Material *material)
 
EffectHandle loadMaterialVariant (Material *material, const MaterialInstance *materialInstance, const MeshStreamsLayout *streamsLayout, const EnginePermutation *permutation, const RenderPassOptions &passOptions, const ClipShapeType clipShape)
 
ActivationResult handleActivation (MaterialHandle handle, Material *resource) override
 Overridden to handle activation of Materials, updating the resource in the renderer.
 
void handleDeletion (Material *resource) override
 Overridden to handle material deletion, removing the resource from the renderer.
 
- Public Member Functions inherited from Cogs::Core::ResourceManager< Material, MaterialLoadInfo >
 ResourceManager (Context *context, Collections::ElementOffset capacity=1024)
 Constructs a resource manager with the given context.
 
 ~ResourceManager () override
 Destructs a resource manager, provided for destruction via base pointer.
 
void clear () override
 Clear the resource manager, cleaning up resources held by member handles.
 
void clearSwapping () override
 Clear the swap queue, ensuring indirect resource references are released.
 
ResourceHandle create ()
 Create a new resource.
 
ResourceHandle release (ResourceId resourceId)
 
ResourceHandle loadResource (MaterialLoadInfo *loadInfo)
 
ResourceProxy createLocked ()
 Creates a new resource, but returns a ResourceProxy for thread safe editing instead of a handle to the actual resource.
 
ResourceProxy lock (const ResourceHandle &handle)
 Takes the handle given and returns a resource proxy to edit the contents of the held resource safely on other threads than the main thread.
 
void unlockProxy (const ResourceHandle &handle, const ResourceHandle &proxy)
 Unlock the given resource proxy.
 
ResourceHandle generateHandle (ResourceBase *resource)
 Generate a handle to the given resource.
 
virtual void handleLoad (MaterialLoadInfo *)
 Handler for resource loading.
 
virtual void handleFailedLoad (const MaterialLoadInfo *)
 Handler for failed resource loads using the given loadInfo.
 
virtual ActivationResult handleActivation (ResourceHandle, Material *)
 Handler for activation of resources.
 
virtual void handleDeletion (Material *)
 Handler for deletion of resources.
 
Materialget (const ResourceHandleBase &handle)
 Resolve the given handle to a resource.
 
void processSwapping () override
 Process queued swap operations, exchanging resource contents of the destination resources by those indicated in the operation data.
 
ResourceHandle getHandle (const ResourceId id) const
 Get a resource handle to the resource with the given id.
 
void registerLoader (IResourceLoader< Material, MaterialLoadInfo > *loader)
 Register a resource loader capable of handling resources of the template type.
 
void destroyLoadInfoInternal (ResourceLoadInfoBase *loadInfo) override
 
MaterialLoadInfocreateLoadInfo ()
 
- Public Member Functions inherited from Cogs::Core::ResourceManagerBase
 ResourceManagerBase (Context *context)
 
void initialize () override
 
void clear () override
 
void reportLeaks (std::string_view typeName)
 
std::string getReport ()
 Return a string with current resource usage.
 
bool checkPreloaded (ResourceLoadInfoBase *loadInfo)
 
ResourceHandleBase releaseInternal (ResourceId resourceId)
 Releases a resourceId -> ResourceHandle mapping.
 
ResourceHandleBase loadResourceInternal (ResourceLoadInfoBase *loadInfo)
 Load a resource using the given loadInfo.
 
void processLoading () final
 Process loading resources.
 
void setProcessed (ResourceLoadInfoBase *loadInfo, bool swapping=false)
 Signal the resource being loaded as done loading and ready for activation etc.
 
void activateResources () final
 
virtual void processDeletion () override
 Process resources pending deallocation.
 
void fillDeletionQueue (std::vector< ResourceBase * > &deletion)
 
void destroyLocked (ResourceBase *resource)
 
void safeDestroy (ResourceBase *resource)
 
ResourceId getNextResourceId () override
 Get the next unique resource id.
 
void resourceChanged (ResourceBase *resource) override
 
void resourceDeleted (ResourceBase *resource) override
 
void setResourceId (ResourceBase *resource, ResourceId id) override
 Assign the given id to a previously created resource.
 
void queueResource (ResourceLoadInfoBase *loadInfo)
 Re-queue the given loadInfo to defer loading to the next time the processLoading() phase is performed.
 
virtual void handleLoadInternal (ResourceLoadInfoBase *loadInfo)=0
 
virtual ActivationResult handleActivationInternal (ResourceHandleBase r, ResourceBase *resource)=0
 
virtual void handleDeletionInternal (ResourceBase *resource)=0
 
virtual void handleFailedLoadInternal (ResourceLoadInfoBase *loadInfo)=0
 
virtual void destroyLoadInfoInternal (ResourceLoadInfoBase *loadInfo)=0
 
virtual bool shouldAutoReload () const
 
virtual bool shouldMergeBySource () const
 
virtual void handleReload (ResourceHandleBase)
 
std::vector< ResourceBase * > getAllocatedResources () const
 
ResourceHandleBase getOrCreate (ResourceId id)
 
ResourceHandleBase getByName (std::string_view name) const
 
ResourceHandleBase getBySource (std::string_view source) const
 
ResourceHandleBase createResource ()
 
virtual ResourceBasecreateInternal ()=0
 
virtual void destroyInternal (ResourceBase *resource)=0
 
virtual void destroyInternalLocked (ResourceBase *resource)=0
 
ResourceHandleBase generateHandle (ResourceBase *resource)
 
void clearUpdated ()
 
virtual int getUpdateQuota () const
 
size_t updatedResourceCount ()
 
size_t orphanedResourceCount ()
 
size_t allocatedResourceCount ()
 
virtual void initialize ()=0
 
virtual void clear ()=0
 
virtual void clearSwapping ()=0
 
virtual void processLoading ()=0
 
virtual void processSwapping ()=0
 
virtual void activateResources ()=0
 
virtual void processDeletion ()=0
 
virtual void resourceChanged (ResourceBase *resource)=0
 
virtual void resourceDeleted (ResourceBase *resource)=0
 
virtual ResourceId getNextResourceId ()=0
 
virtual void setResourceId (ResourceBase *resource, ResourceId id)=0
 

Public Attributes

MaterialHandle materialBase
 
MaterialDefinition materialBaseDefinition
 
std::unordered_map< std::string, MaterialHandlematerials
 
std::unique_ptr< MaterialDefinitionManagermaterialDefinitionManager
 

Additional Inherited Members

- Public Types inherited from Cogs::Core::ResourceManager< Material, MaterialLoadInfo >
using ResourceHandle = ResourceHandle_t< Material >
 Type of handle used to hold resources.
 
using ResourceProxy = ResourceProxy< Material, ResourceManager >
 Type of resource proxy objects, specialized on the type of resource.
 
- Protected Member Functions inherited from Cogs::Core::ResourceManager< Material, MaterialLoadInfo >
MaterialcreateInternal () override
 
void destroyInternal (ResourceBase *resource) override
 
void handleLoadInternal (ResourceLoadInfoBase *loadInfo) override
 
ActivationResult handleActivationInternal (ResourceHandleBase r, ResourceBase *resource) override
 
void handleDeletionInternal (ResourceBase *resource) override
 
void handleFailedLoadInternal (ResourceLoadInfoBase *loadInfo) override
 
IResourceLoader< Material, MaterialLoadInfo > * findLoader (const MaterialLoadInfo *loadInfo)
 Find a loader capable of loading the resource given by loadInfo.
 
- Protected Member Functions inherited from Cogs::Core::ResourceManagerBase
ResourceHandleBase getResourceHandle (ResourceId id) const
 Get existing resource handle.
 
bool isValidResource (ResourceId id) const
 Check if resource handle points to.
 
virtual void postProcessLoading ()
 Hook for resource managers to run code at the tail of processLoading.
 
- Protected Attributes inherited from Cogs::Core::ResourceManager< Material, MaterialLoadInfo >
Mutex swapMutex
 
Collections::Pool< Materialresources
 
std::vector< IResourceLoader< Material, MaterialLoadInfo > * > loaders
 
std::deque< SwapOperation > swapQueue
 
ResourceHandle defaultResource
 
- Protected Attributes inherited from Cogs::Core::ResourceManagerBase
std::unique_ptr< ResourceManagerBaseStoragestorage
 
Contextcontext = nullptr
 
ResourceTypes resourceType = ResourceTypes::Unknown
 

Detailed Description

Material manager handling loading and processing of Material resources.

Definition at line 39 of file MaterialManager.h.

Constructor & Destructor Documentation

◆ MaterialManager()

Cogs::Core::MaterialManager::MaterialManager ( Context context)
inline

Constructs a MaterialManager in the given context.

Definition at line 43 of file MaterialManager.h.

◆ ~MaterialManager()

Cogs::Core::MaterialManager::~MaterialManager ( )

Member Function Documentation

◆ clear()

void Cogs::Core::MaterialManager::clear ( )
inlineoverridevirtual

Override clear to do nothing as we let loaded materials persists through clears.

Implements Cogs::Core::IResourceManager.

Definition at line 54 of file MaterialManager.h.

◆ getDefaultMaterial()

Cogs::Core::MaterialHandle Cogs::Core::MaterialManager::getDefaultMaterial ( )

Get the default material.

Returns
Handle to the default material.

Definition at line 88 of file MaterialManager.cpp.

Referenced by Cogs::Core::DefaultMaterial::initialize().

◆ getMaterial()

Cogs::Core::MaterialHandle Cogs::Core::MaterialManager::getMaterial ( const StringView name)

Definition at line 93 of file MaterialManager.cpp.

◆ handleActivation()

Cogs::Core::ActivationResult Cogs::Core::MaterialManager::handleActivation ( MaterialHandle  handle,
Material resource 
)
overridevirtual

Overridden to handle activation of Materials, updating the resource in the renderer.

Reimplemented from Cogs::Core::ResourceManager< Material, MaterialLoadInfo >.

Definition at line 1030 of file MaterialManager.cpp.

◆ handleDeletion()

void Cogs::Core::MaterialManager::handleDeletion ( Material resource)
overridevirtual

Overridden to handle material deletion, removing the resource from the renderer.

Reimplemented from Cogs::Core::ResourceManager< Material, MaterialLoadInfo >.

Definition at line 1035 of file MaterialManager.cpp.

◆ handleLoad()

void Cogs::Core::MaterialManager::handleLoad ( MaterialLoadInfo loadInfo)
overridevirtual

◆ handleReload()

void Cogs::Core::MaterialManager::handleReload ( ResourceHandleBase  handle)
overridevirtual

Reimplemented from Cogs::Core::ResourceManagerBase.

Definition at line 163 of file MaterialManager.cpp.

◆ initializeDefaultMaterial()

void Cogs::Core::MaterialManager::initializeDefaultMaterial ( )

Initializes the MaterialManager, setting up the default material.

Definition at line 70 of file MaterialManager.cpp.

References Cogs::Core::DefaultMaterial::initialize().

◆ loadMaterial()

Cogs::Core::MaterialHandle Cogs::Core::MaterialManager::loadMaterial ( const StringView fileName,
MaterialLoadFlags  materialLoadFlags = MaterialLoadFlags::None,
ResourceId  resourceId = NoResourceId 
)

Loads a Material from the given fileName.

Parameters
fileNameFile to load material definition from.
Returns
Handle to the Material resource instance.

Definition at line 102 of file MaterialManager.cpp.

References Cogs::Core::ResourceLoadInfoBase::loadFlags, Cogs::Core::ResourceLoadInfoBase::resourceId, and Cogs::Core::ResourceLoadInfoBase::resourcePath.

◆ loadMaterialVariant()

Cogs::Core::EffectHandle Cogs::Core::MaterialManager::loadMaterialVariant ( Material material,
const MaterialInstance materialInstance,
const MeshStreamsLayout streamsLayout,
const EnginePermutation permutation,
const RenderPassOptions passOptions,
const ClipShapeType  clipShape 
)

◆ releaseAll()

void Cogs::Core::MaterialManager::releaseAll ( )

Clear out all materials, done as part of shutdown process.

Definition at line 63 of file MaterialManager.cpp.

References Cogs::Core::ResourceManager< ResourceType, LoadInfoType >::clear().

◆ setupMaterial()

bool Cogs::Core::MaterialManager::setupMaterial ( Material material)

Definition at line 177 of file MaterialManager.cpp.

Member Data Documentation

◆ materialBase

MaterialHandle Cogs::Core::MaterialManager::materialBase

Definition at line 101 of file MaterialManager.h.

◆ materialBaseDefinition

MaterialDefinition Cogs::Core::MaterialManager::materialBaseDefinition

Definition at line 102 of file MaterialManager.h.

◆ materialDefinitionManager

std::unique_ptr<MaterialDefinitionManager> Cogs::Core::MaterialManager::materialDefinitionManager

Definition at line 106 of file MaterialManager.h.

◆ materials

std::unordered_map<std::string, MaterialHandle> Cogs::Core::MaterialManager::materials

Definition at line 104 of file MaterialManager.h.


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