Cogs.Core
RenderResource.h
1#pragma once
2
3#include "Base.h"
4
5#include "Rendering/Common.h"
6#include "Rendering/DataFormat.h"
7
8namespace Cogs::Core
9{
10 enum class RenderResourceType : uint8_t
11 {
12 Unknown = 0,
13 TaskResource,
14 RenderTarget,
15 RenderList,
16 RenderBuffer,
17 RenderTexture,
18 RenderMesh,
19 RenderEffect,
20 RenderMaterial,
21 RenderMaterialInstance,
22 };
23
24 enum class RenderResourceFlags : uint8_t
25 {
27 None = 0,
32 Persistent = 1 << 0,
36 Override = 1 << 1,
37 Owned = 1 << 2,
38 Active = 1 << 3,
39 Delayed = 1 << 4,
40 Failed = 1 << 5,
41 Released = 1 << 6
42 };
43
44 ENABLE_ENUM_FLAGS(RenderResourceFlags);
45
46 struct COGSCORE_DLL_API RenderResource
47 {
48 typedef uint32_t Id;
49
51
52 RenderResource(const RenderResource &) = delete;
53 RenderResource& operator=(const RenderResource&) = delete;
54
55 void setActive() { flags |= RenderResourceFlags::Active; flags &= ~RenderResourceFlags::Delayed; flags &= ~RenderResourceFlags::Failed; }
56 void setDelayed() { flags |= RenderResourceFlags::Delayed; }
57 void setFailed() { flags |= RenderResourceFlags::Failed; }
58 void setReleased() { flags |= RenderResourceFlags::Released; flags &= ~RenderResourceFlags::Active; }
59 void setOwned() { flags |= RenderResourceFlags::Owned; }
60 void setPersistent() { flags |= RenderResourceFlags::Persistent; }
61 void setOverride() { flags |= RenderResourceFlags::Override; }
62
69 bool isActive() const { return isSet(RenderResourceFlags::Active); }
70
77 bool isDelayed() const { return isSet(RenderResourceFlags::Delayed); }
78
79 bool isSet(RenderResourceFlags flag) const { return (flags & flag) != 0; }
80 bool isPersistent() const { return isSet(RenderResourceFlags::Persistent); }
81 bool isOverride() const { return isSet(RenderResourceFlags::Override); }
82 bool hasFailed() const { return isSet(RenderResourceFlags::Failed); }
83 bool isReleased() const { return isSet(RenderResourceFlags::Released); }
84 bool isOwned() const { return isSet(RenderResourceFlags::Owned); }
85
86 void setName(std::string_view str) { name = std::string(str); }
87 const std::string& getName() const { return name; }
88
89 RenderResourceType getType() const { return type; }
90 RenderResourceFlags getFlags() const { return flags; }
91
92 void incrementGeneration() { ++generation; }
93 uint16_t getGeneration() { return generation; }
94
95 // A running number to make it easy to check identity of a
96 // render resources even when memory has been recycled
97 Id getIdentity() const { return identity; }
98
99 protected:
100 std::string name;
101
102 RenderResourceType type = RenderResourceType::Unknown;
103 RenderResourceFlags flags = RenderResourceFlags::None;
104
105 uint16_t generation = 0;
106 Id identity = 0;
107
108 friend class RenderResources;
109 };
110}
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
@ Persistent
The resource will persist from frame to frame, and can be considered ready for use at the beginning o...
@ Override
The resource contents are overridden from external code, and should not be updated automatically.
bool isDelayed() const
Get if the render resource is in a delayed state.
bool isActive() const
Get if the render resource is active and can be used for rendering.