Cogs.Core
MaterialSystem.h
1#pragma once
2
3#include "Systems/ComponentSystem.h"
4
5#include <unordered_map>
6
7#include "Components/Appearance/MaterialComponent.h"
8
9namespace Cogs
10{
11 namespace Core
12 {
13 class Context;
14
16 {
19
21 bool sharedInstance = false;
22
24 bool lockInstance = false;
25 };
26
35 class MaterialSystem : public ComponentSystemWithDataPool<MaterialComponent, MaterialData>
36 {
37 public:
38 MaterialSystem(Memory::Allocator * allocator, SizeType capacity) : ComponentSystemWithDataPool(allocator, capacity) {}
39
41 void update(Context * context) override;
42
44 void cleanup(Context * context) override;
45
48
50 std::unordered_map<size_t, MaterialInstanceHandle> instances;
51 };
52 }
53}
Context * context
Pointer to the Context instance the system lives in.
void update()
Updates the system state to that of the current frame.
Component system with parallel data per component stored in a pool similar to how the components them...
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
Updates material components.
void removeUnusedSharedInstances()
Removes any shared material instances no longer in use.
std::unordered_map< size_t, MaterialInstanceHandle > instances
Holds shared material instances used by one or more MaterialComponent instances.
void cleanup(Context *context) override
Cleanup the material system, releasing any shared material instances held.
Base allocator implementation.
Definition: Allocator.h:30
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
ComponentIndex SizeType
Type used to track the size of pools.
Definition: Component.h:19
bool lockInstance
If the material component should be locked to its current instance.
bool sharedInstance
If the material instance currently held is shared.
MaterialInstanceHandle instance
Currently active material instance.
static const ResourceHandle_t NoHandle
Handle representing a default (or none if default not present) resource.