Cogs.Core
RenderResource.h
1#pragma once
2
3#include "Base.h"
4
5#include "Utilities/Strings.h"
6
7#include "Rendering/Common.h"
8#include "Rendering/DataFormat.h"
9
10namespace Cogs::Core
11{
12 enum class RenderResourceType : uint8_t
13 {
14 Unknown = 0,
15 TaskResource,
16 RenderTarget,
17 RenderList,
18 RenderBuffer,
19 RenderTexture,
20 RenderMesh,
21 RenderEffect,
22 RenderMaterial,
23 RenderMaterialInstance,
24 };
25
26 enum class RenderResourceFlags : uint8_t
27 {
29 None = 0,
34 Persistent = 1 << 0,
38 Override = 1 << 1,
39 Owned = 1 << 2,
40 Active = 1 << 3,
41 Delayed = 1 << 4,
42 Failed = 1 << 5,
43 Released = 1 << 6
44 };
45
46 ENABLE_ENUM_FLAGS(RenderResourceFlags);
47
48 struct COGSCORE_DLL_API RenderResource
49 {
50 typedef uint32_t Id;
51
53
54 RenderResource(const RenderResource &) = delete;
55 RenderResource& operator=(const RenderResource&) = delete;
56
57 void setActive() { flags |= RenderResourceFlags::Active; flags &= ~RenderResourceFlags::Delayed; flags &= ~RenderResourceFlags::Failed; }
58 void setDelayed() { flags |= RenderResourceFlags::Delayed; }
59 void setFailed() { flags |= RenderResourceFlags::Failed; }
60 void setReleased() { flags |= RenderResourceFlags::Released; flags &= ~RenderResourceFlags::Active; }
61 void setOwned() { flags |= RenderResourceFlags::Owned; }
62 void setPersistent() { flags |= RenderResourceFlags::Persistent; }
63 void setOverride() { flags |= RenderResourceFlags::Override; }
64
71 bool isActive() const { return isSet(RenderResourceFlags::Active); }
72
79 bool isDelayed() const { return isSet(RenderResourceFlags::Delayed); }
80
81 bool isSet(RenderResourceFlags flag) const { return (flags & flag) != 0; }
82 bool isPersistent() const { return isSet(RenderResourceFlags::Persistent); }
83 bool isOverride() const { return isSet(RenderResourceFlags::Override); }
84 bool hasFailed() const { return isSet(RenderResourceFlags::Failed); }
85 bool isReleased() const { return isSet(RenderResourceFlags::Released); }
86 bool isOwned() const { return isSet(RenderResourceFlags::Owned); }
87
88 void setName(const StringView & str) { name = Strings::add(str); }
89 StringView getName() const { return Strings::get(name); }
90
91 RenderResourceType getType() const { return type; }
92 RenderResourceFlags getFlags() const { return flags; }
93
94 void incrementGeneration() { ++generation; }
95 uint16_t getGeneration() { return generation; }
96
97 // A running number to make it easy to check identity of a
98 // render resources even when memory has been recycled
99 Id getIdentity() const { return identity; }
100
101 protected:
102 StringRef name = NoString;
103
104 RenderResourceType type = RenderResourceType::Unknown;
105 RenderResourceFlags flags = RenderResourceFlags::None;
106
107 uint16_t generation = 0;
108 Id identity = 0;
109
110 friend class RenderResources;
111 };
112}
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.