Cogs.Core
ResourceManagerBase.h
1#pragma once
2
3#include "ResourceLoadInfo.h"
4#include "ResourceHandle.h"
5
6namespace Cogs
7{
8 namespace Core
9 {
10 class Context;
11
12 struct ResourceManagerBaseStorage;
13
14 class COGSCORE_DLL_API ResourceManagerBase : public IResourceManager
15 {
16 public:
18 ~ResourceManagerBase() override;
19
20 void initialize() override;
21 void clear() override;
22
23 void reportLeaks(std::string_view typeName);
24
26 std::string getReport();
27
28 bool checkPreloaded(ResourceLoadInfoBase * loadInfo);
29
35 ResourceHandleBase releaseInternal(ResourceId resourceId);
36
48 ResourceHandleBase loadResourceInternal(ResourceLoadInfoBase * loadInfo);
49
61 void processLoading() final;
62
68 void setProcessed(ResourceLoadInfoBase * loadInfo, bool swapping = false);
69
70 void activateResources() final;
71
77 virtual void processDeletion() override;
78
79 void fillDeletionQueue(std::vector<ResourceBase *> & deletion);
80
81 void destroyLocked(ResourceBase * resource);
82 void safeDestroy(ResourceBase * resource);
83
89 ResourceId getNextResourceId() override;
90
91 void resourceChanged(ResourceBase * resource) override;
92 void resourceDeleted(ResourceBase * resource) override;
93
97 void setResourceId(ResourceBase * resource, ResourceId id) override;
98
104 void queueResource(ResourceLoadInfoBase * loadInfo);
105
106 virtual void handleLoadInternal(ResourceLoadInfoBase * loadInfo) = 0;
107 virtual ActivationResult handleActivationInternal(ResourceHandleBase r, ResourceBase * resource) = 0;
108 virtual void handleDeletionInternal(ResourceBase * resource) = 0;
109 virtual void handleFailedLoadInternal(ResourceLoadInfoBase * loadInfo) = 0;
110 virtual void destroyLoadInfoInternal(ResourceLoadInfoBase * loadInfo) = 0;
111 virtual bool shouldAutoReload() const;
112 virtual bool shouldMergeBySource() const { return true; }
113 virtual void handleReload(ResourceHandleBase /*handle*/) {}
114
115 std::vector<ResourceBase *> getAllocatedResources() const;
116
117 ResourceHandleBase getOrCreate(ResourceId id);
118
119 ResourceHandleBase getByName(std::string_view name) const;
120 ResourceHandleBase getBySource(std::string_view source) const;
121
122 ResourceHandleBase createResource();
123
124 virtual ResourceBase * createInternal() = 0;
125 virtual void destroyInternal(ResourceBase * resource) = 0;
126 virtual void destroyInternalLocked(ResourceBase * resource) = 0;
127
128 ResourceHandleBase generateHandle(ResourceBase * resource);
129
130 void clearUpdated();
131
132 virtual int getUpdateQuota() const;
133
134 // For debug purposes
135 size_t updatedResourceCount();
136
137 // For debug purposes
138 size_t orphanedResourceCount();
139
140 // For debug purposes
141 size_t allocatedResourceCount();
142
143 protected:
145 [[nodiscard]] ResourceHandleBase getResourceHandle(ResourceId id) const;
146
148 [[nodiscard]] bool isValidResource(ResourceId id) const;
149
151 virtual void postProcessLoading() {}
152
153 protected:
154 std::unique_ptr<ResourceManagerBaseStorage> storage;
155
156 Context * context = nullptr;
157 ResourceTypes resourceType = ResourceTypes::Unknown;
158
159 private:
160 ResourceHandleBase createResourceInternal();
161 ResourceHandleBase getOrCreateInternal(ResourceId id);
162
174 void destroy(ResourceBase * resource);
175 };
176 }
177}
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
Defines common resource manager interface shared by resource managers for all types of resources.
virtual void postProcessLoading()
Hook for resource managers to run code at the tail of processLoading.
ActivationResult
Defines results for resource activation.
Definition: ResourceBase.h:14
ResourceTypes
Resource types.
Definition: ResourceBase.h:64
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
Base class for engine resources.
Definition: ResourceBase.h:107
Resource handle base class handling reference counting of resources derived from ResourceBase.