27 LOG_INFO(
"Creating built-in materials...");
28 auto start = std::chrono::steady_clock::now();
31 setBasicTexture3D.
materialName = std::string{
"BasicTexture3D" };
38 if (basicTexture3DMat)
40 basicTexture3DMat->
AddTexture(
"test_cube_color");
43 LOG_DEBUG(
"Creating material: BasicTexture3D");
48 setFlatColorFiltering.
materialName = std::string{
"FlatColorFiltering" };
55 if (flatColorFilteringMat)
57 flatColorFilteringMat->
AddTexture(
"D4FontTextureSegoeScript");
59 LOG_DEBUG(
"Creating material: FlatColorFiltering");
73 testSprite2dMat->
AddTexture(
"PNG_transparency_demonstration_1");
87 rectangle2DMat->
SetVec4(
"Color", glm::vec4(1.0f, 1.0f, 1.0f, 1.0f));
88 LOG_DEBUG(
"Creating material: Rectangle2D");
91 auto end = std::chrono::steady_clock::now();
93 std::chrono::duration<float, std::milli>(end - start).count();
95 LOG_INFO(
"Built-in materials created in " +
96 std::to_string(totalMs) +
" ms.");
103 LOG_ERROR(
"Attempted to add material with empty name.");
111 it->second->ReleaseRenderResources();
115 std::make_shared<Material>(
mRenderer, matSettings);
133 LOG_INFO(
"Removing material: " + materialName);
134 it->second->ReleaseRenderResources();
141 LOG_INFO(
"Releasing all materials.");
149 material.second->ReleaseRenderResources();
157 material.second->InitializeRenderResources();
Defines an abstract interface for rendering backends.
virtual void RegisterObserver(IRendererObserver *notifier)=0
Registers an observer for rendering events.
virtual void UnregisterObserver(IRendererObserver *notifier)=0
Unregisters a previously registered observer.
void OnRenderResourcesRebuild() override
Renderer callback: re-upload or recreate all GPU resources (used after device reset/rebuild).
Material * GetMaterial(std::string materialName)
Retrieves a pointer to a Material instance by name.
void CreateBuildInMaterials()
Creates built-in materials for testing or demonstration.
void RemoveMaterial(std::string materialName)
Removes a material from the cache.
MaterialCache(IRenderer *renderer)
Constructs a MaterialCache and registers it as a renderer observer.
void AddMaterial(MaterialSettings matSettings)
Adds a new Material instance using the provided settings.
std::unordered_map< std::string, std::shared_ptr< Material > > mMaterials
~MaterialCache()
Destructor. Automatically unregisters from the renderer.
void OnRenderResourcesRelease() override
Renderer callback: release all GPU resources (used during device loss/reset).
void ReleaseAll()
Releases all GPU resources associated with cached materials.
Represents a material instance with parameter values, texture bindings, and rendering configuration.
void InitializeRenderResources()
Initializes backend-specific GPU resources associated with this material.
void SetVec4(const std::string &name, glm::vec4 value)
Sets a vec4 parameter for the material.
void AddTexture(const std::string &textureName)
Adds a texture name to the material's list of used textures.
Engine-wide logging system for runtime diagnostics and performance tracking.
static const std::vector< MaterialParameterLayoutEntry > Rectangle2DLayout
Settings required to define a material instance.
MaterialDomain materialDomain
ShadingModel shadingModel
const std::vector< MaterialParameterLayoutEntry > * parameterLayout