Cogs.Core
MaterialManager.h
1#pragma once
2
3#include "Resources.h"
4#include "MaterialInstance.h"
5#include "EffectManager.h"
6#include "MeshStreamsLayout.h"
7
8#include "MaterialDefinitionManager.h"
9
10#include "Foundation/StringView.h"
11
12namespace Cogs
13{
14 namespace Core
15 {
16 enum struct ClipShapeType : uint32_t;
17 struct RenderPassOptions;
18
20 enum class MaterialLoadFlags : uint32_t
21 {
23 None = 0,
26 };
27
28 ENABLE_ENUM_FLAGS(MaterialLoadFlags)
29
30
32 {
34 };
35
39 class COGSCORE_DLL_API MaterialManager : public ResourceManager<Material, MaterialLoadInfo>
40 {
41 public:
44 ResourceManager(context, 128),
45 materialDefinitionManager(std::make_unique<MaterialDefinitionManager>())
46 {
47
48 }
49
52
54 void clear() override {}
55
57 void releaseAll();
58
60 void initializeDefaultMaterial();
61
67 MaterialHandle getDefaultMaterial();
68
69 MaterialHandle getMaterial(const StringView & name);
70
78 MaterialHandle loadMaterial(const StringView & fileName, MaterialLoadFlags materialLoadFlags = MaterialLoadFlags::None, ResourceId resourceId = NoResourceId);
79
81 void handleLoad(MaterialLoadInfo * loadInfo) override;
82
83 void handleReload(ResourceHandleBase handle) override;
84
85 [[nodiscard]] bool setupMaterial(Material * material);
86
88 EffectHandle loadMaterialVariant(Material* material,
89 const MaterialInstance* materialInstance,
90 const MeshStreamsLayout* streamsLayout,
91 const EnginePermutation* permutation,
92 const RenderPassOptions& passOptions,
93 const ClipShapeType clipShape);
94
96 ActivationResult handleActivation(MaterialHandle handle, Material * resource) override;
97
99 void handleDeletion(Material * resource) override;
100
101 MaterialHandle materialBase;
102 MaterialDefinition materialBaseDefinition;
103
104 std::unordered_map<std::string, MaterialHandle> materials;
105
106 std::unique_ptr<MaterialDefinitionManager> materialDefinitionManager;
107 };
108
112 class COGSCORE_DLL_API MaterialInstanceManager : public ResourceManager<MaterialInstance, ResourceLoadInfoBase>
113 {
114 public:
117
120
122 void initialize() override;
123
124 void initializeDefaultMaterialInstance();
125
136 MaterialInstanceHandle createMaterialInstance(const MaterialHandle & material);
137
138 MaterialInstanceHandle getMaterialInstance(const StringView & name);
139
141 ActivationResult handleActivation(MaterialInstanceHandle handle, MaterialInstance * resource) override;
142
144 void handleDeletion(MaterialInstance * resource) override;
145
146 int getUpdateQuota() const override;
147 };
148 }
149}
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
Material instance manager handles creation, processing and lifetime for MaterialInstance resources.
MaterialInstanceManager(Context *context)
Constructs a MaterialInstanceManager in the given context.
Material manager handling loading and processing of Material resources.
void clear() override
Override clear to do nothing as we let loaded materials persists through clears.
MaterialManager(Context *context)
Constructs a MaterialManager in the given context.
The generic resource manager provides a base implementation for specialized resource managers to buil...
Provides a weakly referenced view over the contents of a string.
Definition: StringView.h:24
ClipShapeType
Specifices what kind of shape a clip shape has.
ActivationResult
Defines results for resource activation.
Definition: ResourceBase.h:14
MaterialLoadFlags
Material loading flags.
@ DelayVariantLoading
Do not load any material variants, will be specified later.
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
STL namespace.
Material instances represent a specialized Material combined with state for all its buffers and prope...
Defines loading information for Material resources.
Material resources define the how of geometry rendering (the what is defined by Mesh and Texture reso...
Definition: Material.h:82
Resource handle base class handling reference counting of resources derived from ResourceBase.