Rendering Engine 0.2.0
Modular Graphics Rendering Engine | v0.2.0
Loading...
Searching...
No Matches
material_cache.cpp
Go to the documentation of this file.
1#include "material_cache.hpp"
2#include "i_renderer.hpp"
3#include "material.hpp"
5
6namespace rendering_engine
7{
8
10 :
11 mRenderer(renderer)
12{
13 mRenderer->RegisterObserver(this);
14}
15
17{
18 mRenderer->UnregisterObserver(this);
19}
20
22{
23 // BasicTexture3D material
24 MaterialSettings setBasicTexture3D;
25 setBasicTexture3D.materialName = std::string{ "BasicTexture3D" };
26 setBasicTexture3D.materialDomain = MaterialDomain::Surface3D;
27 setBasicTexture3D.shadingModel = ShadingModel::Unlit;
28 setBasicTexture3D.blendMode = BlendMode::Opaque;
29
30 AddMaterial(setBasicTexture3D);
31 Material* basicTexture3DMat = GetMaterial(setBasicTexture3D.materialName);
32 if (basicTexture3DMat)
33 {
34 basicTexture3DMat->AddTexture("test_cube_color");
35 //basicTexture3DMat->AddTexture("PNG_transparency_demonstration_1");
36 }
37 basicTexture3DMat->InitializeRenderResources();
38
39 // FlatColorFiltering material
40 MaterialSettings setFlatColorFiltering;
41 setFlatColorFiltering.materialName = std::string{ "FlatColorFiltering" };
42 setFlatColorFiltering.materialDomain = MaterialDomain::Surface3D;
43 setFlatColorFiltering.shadingModel = ShadingModel::Unlit;
44 setFlatColorFiltering.blendMode = BlendMode::Opaque;
45
46 AddMaterial(setFlatColorFiltering);
47 Material* flatColorFilteringMat = GetMaterial(setFlatColorFiltering.materialName);
48 if (flatColorFilteringMat)
49 {
50 flatColorFilteringMat->AddTexture("D4FontTextureSegoeScript");
51 }
52 flatColorFilteringMat->InitializeRenderResources();
53
54 // Test sprite 2d
55 MaterialSettings setTestSprite2d;
56 setTestSprite2d.materialName = std::string{ "Quad2D" };
58 setTestSprite2d.shadingModel = ShadingModel::Unlit;
59 setTestSprite2d.blendMode = BlendMode::Opaque;
60
61 AddMaterial(setTestSprite2d);
62 Material* testSprite2dMat = GetMaterial(setTestSprite2d.materialName);
63 if (testSprite2dMat)
64 {
65 testSprite2dMat->AddTexture("PNG_transparency_demonstration_1");
66 }
67
68 testSprite2dMat->InitializeRenderResources();
69}
70
72{
73 if (matSettings.materialName.empty())
74 {
75 // Log incorrect material name
76 return;
77 }
78 mMaterials[matSettings.materialName] = std::make_shared<Material>(mRenderer, matSettings);
79}
80
81Material* MaterialCache::GetMaterial(std::string materialName)
82{
83 if (auto search = mMaterials.find(materialName); search == mMaterials.end())
84 {
85 return nullptr;
86 }
87
88 return mMaterials.at(materialName).get();
89}
90
91void MaterialCache::RemoveMaterial(std::string materialName)
92{
93 if (auto it = mMaterials.find(materialName); it != mMaterials.end())
94 {
95 it->second->ReleaseRenderResources();
96 mMaterials.erase(it);
97 }
98}
99
104
106{
107 for (auto& material : mMaterials)
108 {
109 material.second->ReleaseRenderResources();
110 }
111}
112
114{
115 for (auto& material : mMaterials)
116 {
117 material.second->InitializeRenderResources();
118 }
119}
120
121}
Defines an abstract interface for rendering backends.
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.
Definition material.hpp:30
void InitializeRenderResources()
Initializes backend-specific GPU resources associated with this material.
Definition material.cpp:20
void AddTexture(const std::string &textureName)
Adds a texture name to the material's list of used textures.
Definition material.cpp:96
Settings required to define a material instance.