11//
22
3+
34// Created by carlo on 2024-11-22.
45//
56
67
8+ #ifndef RESOURCESMANAGER_HPP
9+ #define RESOURCESMANAGER_HPP
710
8-
9- #ifndef RESOURCESMANGER_HPP
10- #define RESOURCESMANGER_HPP
11+ #define BASE_SIZE 10000
1112
1213namespace ENGINE
1314{
14-
15-
16- #define BASE_SIZE 1000000
1715 class ResourcesManager
1816 {
1917 public:
20-
21- static ResourcesManager* GetInstance (Core* coreRef = nullptr )
22- {
23- if (instance == nullptr )
24- {
25- assert (coreRef != nullptr &&" core must be set" );
26- instance = new ResourcesManager (coreRef);
27- }
28- return instance;
29- }
30-
3118
19+
3220 ImageShipper* SetShipperPath (std::string name, std::string path)
3321 {
3422 assert (core!= nullptr &&" core must be set" );
3523 ImageShipper* imageShipper;
3624 if (imagesShippersNames.contains (name))
3725 {
3826 imageShipper = imageShippers.at (imagesShippersNames.at (name)).get ();
39- }else
27+ }
28+ else
4029 {
41- imageShippers. emplace_back (std::make_unique<ImageShipper> ());
42- imagesShippersNames. try_emplace (name );
43- imageShipper = GetShipperFromName (name);
30+ imagesShippersNames. try_emplace (name, ( int32_t )imageShippers. size ());
31+ imageShippers. emplace_back (std::make_unique<ImageShipper>() );
32+ imageShipper = GetShipperFromName (name);
4433 }
4534 imageShipper->SetDataFromPath (path);
4635 return imageShipper;
47-
4836 }
37+
38+ ~ResourcesManager () = default ;
4939 ImageShipper* SetShipperDataRaw (std::string name, void * data, int width, int height, vk::DeviceSize size)
5040 {
5141 assert (core!= nullptr &&" core must be set" );
@@ -56,16 +46,16 @@ namespace ENGINE
5646 }
5747 else
5848 {
49+ imagesShippersNames.try_emplace (name, (int32_t )imageShippers.size ());
5950 imageShippers.emplace_back (std::make_unique<ImageShipper>());
60- imagesShippersNames.try_emplace (name);
6151 imageShipper = GetShipperFromName (name);
6252 }
6353 imageShipper->SetDataRaw (data, width, width, size);
6454 return imageShipper;
6555 }
66-
67- ImageShipper* GetShipper (std::string name,uint32_t arrayLayersCount, uint32_t mipsCount, vk::Format format,
68- LayoutPatterns dstPattern)
56+
57+ ImageShipper* GetShipper (std::string name, uint32_t arrayLayersCount, uint32_t mipsCount, vk::Format format,
58+ LayoutPatterns dstPattern)
6959 {
7060 assert (core!= nullptr &&" core must be set" );
7161 ImageShipper* imageShipper;
@@ -75,104 +65,108 @@ namespace ENGINE
7565 }
7666 else
7767 {
68+ imagesShippersNames.try_emplace (name, (int32_t )imageShippers.size ());
7869 imageShippers.emplace_back (std::make_unique<ImageShipper>());
79- imagesShippersNames.try_emplace (name);
8070 imageShipper = GetShipperFromName (name);
8171 return imageShipper;
8272 }
8373 imageShipper->BuildImage (core, arrayLayersCount, mipsCount, format, dstPattern);
8474 return imageShipper;
8575 }
8676
87-
77+
8878 ImageView* GetImage (std::string name, vk::ImageCreateInfo imageInfo, int baseMipLevel,
89- int mipLevelCount, int baseArrayLayer, int arrayLayerCount)
79+ int mipLevelCount, int baseArrayLayer, int arrayLayerCount)
9080 {
9181 assert (core!= nullptr &&" core must be set" );
9282 auto image = std::make_unique<
9383 Image>(core->physicalDevice , core->logicalDevice .get (), imageInfo);
9484 if (imageInfo.usage == vk::ImageUsageFlagBits::eStorage)
9585 {
96-
9786 assert (!storageImagesNames.contains (name) && " Image name already exist" );
9887 storageImagesNames.try_emplace (name, (int32_t )storageImagesViews.size ());
99- storageImagesViews.emplace_back (std::make_unique<ImageView>(core->logicalDevice .get (), image->imageData .get (),
100- baseMipLevel, mipLevelCount, baseArrayLayer,
101- arrayLayerCount));
88+ storageImagesViews.emplace_back (std::make_unique<ImageView>(
89+ core->logicalDevice .get (), image->imageData .get (),
90+ baseMipLevel, mipLevelCount, baseArrayLayer,
91+ arrayLayerCount));
10292 images.emplace_back (std::move (image));
10393 return storageImagesViews.back ().get ();
104- }else
94+ }
95+ else
10596 {
10697 assert (!imagesNames.contains (name) && " Image name already exist" );
10798 imagesNames.try_emplace (name, (int32_t )imageViews.size ());
10899 imageViews.emplace_back (std::make_unique<ImageView>(core->logicalDevice .get (), image->imageData .get (),
109- baseMipLevel, mipLevelCount, baseArrayLayer,
110- arrayLayerCount));
100+ baseMipLevel, mipLevelCount, baseArrayLayer,
101+ arrayLayerCount));
111102 images.emplace_back (std::move (image));
112103 return imageViews.back ().get ();
113104 }
114105 }
106+
115107 Buffer* GetBuffer (std::string name, vk::BufferUsageFlags bufferUsageFlags,
116- vk::MemoryPropertyFlags memPropertyFlags, vk::DeviceSize deviceSize
117- , void * data = nullptr )
108+ vk::MemoryPropertyFlags memPropertyFlags, vk::DeviceSize deviceSize
109+ , void * data = nullptr )
118110 {
119111 assert (core!= nullptr &&" core must be set" );
120112 assert (!bufferNames.contains (name) && " Buffer name already exist" );
121-
113+
122114 auto buffer = std::make_unique<Buffer>(
123115 core->physicalDevice , core->logicalDevice .get (), bufferUsageFlags, memPropertyFlags, deviceSize,
124116 data);
125-
117+
126118 bufferNames.try_emplace (name, (int32_t )buffers.size ());
127119 buffers.emplace_back (std::move (buffer));
128120 return buffers.back ().get ();
129121 }
122+
130123 StagedBuffer* GetStageBuffer (std::string name, vk::BufferUsageFlags bufferUsageFlags, vk::DeviceSize deviceSize
131- )
124+ )
132125 {
133126 assert (core!= nullptr &&" core must be set" );
134127 assert (!stagedBufferNames.contains (name) && " Buffer name already exist" );
135-
128+
136129 auto buffer = std::make_unique<StagedBuffer>(
137130 core->physicalDevice , core->logicalDevice .get (), bufferUsageFlags, deviceSize);
138-
131+
139132 stagedBufferNames.try_emplace (name, (int32_t )buffers.size ());
140133 stagedBuffers.emplace_back (std::move (buffer));
141134 return stagedBuffers.back ().get ();
142135 }
143-
136+
144137 Buffer* SetBuffer (std::string name, vk::BufferUsageFlags bufferUsageFlags,
145- vk::MemoryPropertyFlags memPropertyFlags, vk::DeviceSize deviceSize
146- , void * data = nullptr )
138+ vk::MemoryPropertyFlags memPropertyFlags, vk::DeviceSize deviceSize
139+ , void * data = nullptr )
147140 {
148141 assert (core!= nullptr &&" core must be set" );
149142 assert (bufferNames.contains (name) && " Buffer dont exist" );
150-
143+
151144 auto buffer = std::make_unique<Buffer>(
152145 core->physicalDevice , core->logicalDevice .get (), bufferUsageFlags, memPropertyFlags, deviceSize,
153146 data);
154-
155-
156- buffers.at (bufferNames.at (name)).reset (new Buffer (core->physicalDevice , core->logicalDevice .get (), bufferUsageFlags, memPropertyFlags, deviceSize, data));
147+
148+
149+ buffers.at (bufferNames.at (name)).reset (new Buffer (core->physicalDevice , core->logicalDevice .get (),
150+ bufferUsageFlags, memPropertyFlags, deviceSize, data));
157151 return buffers.at (bufferNames.at (name)).get ();
158152 }
159-
153+
160154 StagedBuffer* SetStageBuffer (std::string name, vk::BufferUsageFlags bufferUsageFlags,
161- vk::DeviceSize deviceSize
155+ vk::DeviceSize deviceSize
162156 )
163157 {
164158 assert (core!= nullptr &&" core must be set" );
165159 assert (!stagedBufferNames.contains (name) && " staged buffer dont exist" );
166-
160+
167161 auto buffer = std::make_unique<StagedBuffer>(
168162 core->physicalDevice , core->logicalDevice .get (), bufferUsageFlags, deviceSize);
169-
170- stagedBuffers.at (stagedBufferNames.at (name)).reset (new StagedBuffer (core->physicalDevice , core->logicalDevice .get (), bufferUsageFlags, deviceSize));
163+
164+ stagedBuffers.at (stagedBufferNames.at (name)).reset (
165+ new StagedBuffer (core->physicalDevice , core->logicalDevice .get (), bufferUsageFlags, deviceSize));
171166 return stagedBuffers.at (stagedBufferNames.at (name)).get ();
172167 }
173168
174169
175-
176170 ImageView* GetImageViewFromName (std::string name)
177171 {
178172 if (!imagesNames.contains (name))
@@ -181,6 +175,7 @@ namespace ENGINE
181175 }
182176 return imageViews.at (imagesNames.at (name)).get ();
183177 }
178+
184179 ImageShipper* GetShipperFromName (std::string name)
185180 {
186181 if (!imagesShippersNames.contains (name))
@@ -189,7 +184,7 @@ namespace ENGINE
189184 }
190185 return imageShippers.at (imagesShippersNames.at (name)).get ();
191186 }
192-
187+
193188 ImageShipper* GetStorageFromName (std::string name)
194189 {
195190 if (!storageImagesNames.contains (name))
@@ -207,6 +202,7 @@ namespace ENGINE
207202 }
208203 return buffers.at (bufferNames.at (name)).get ();
209204 }
205+
210206 StagedBuffer* GetStagedBuffFromName (std::string name)
211207 {
212208 if (!stagedBufferNames.contains (name))
@@ -217,20 +213,34 @@ namespace ENGINE
217213 }
218214
219215
220-
221216 void DestroyResources ()
222217 {
223218 buffers.clear ();
224219 stagedBuffers.clear ();
225220 storageImagesViews.clear ();
226221 imageViews.clear ();
227222 imageShippers.clear ();
228- images.clear ();
223+ images.clear ();
229224 }
230225
231-
232- Core* core;
233-
226+ ResourcesManager (Core* coreRefs)
227+ {
228+ this ->core = coreRefs;
229+ stagedBuffers.reserve (BASE_SIZE);
230+ buffers.reserve (BASE_SIZE);
231+ storageImagesViews.reserve (BASE_SIZE);
232+ imageViews.reserve (BASE_SIZE);
233+ images.reserve (BASE_SIZE);
234+ }
235+ static ResourcesManager* GetInstance (Core* coreRef = nullptr )
236+ {
237+ if (instance == nullptr && coreRef != nullptr )
238+ {
239+ instance = new ResourcesManager (coreRef);
240+ }
241+ return instance;
242+ }
243+
234244 std::unordered_map<std::string, int32_t > bufferNames;
235245 std::unordered_map<std::string, int32_t > stagedBufferNames;
236246 std::unordered_map<std::string, int32_t > imagesNames;
@@ -244,23 +254,15 @@ namespace ENGINE
244254 std::vector<std::unique_ptr<ImageView>> storageImagesViews;
245255 std::vector<std::unique_ptr<ImageShipper>> imageShippers;
246256 std::vector<std::unique_ptr<Image>> images;
247-
248257
249- private:
258+ Core* core;
250259 static ResourcesManager* instance;
251-
252- ResourcesManager (Core* core)
253- {
254- this ->core = core;
255- stagedBuffers.reserve (BASE_SIZE);
256- buffers.reserve (BASE_SIZE);
257- storageImagesViews.reserve (BASE_SIZE);
258- imageViews.reserve (BASE_SIZE);
259- images.reserve (BASE_SIZE);
260- };
260+
261+
261262 };
263+
262264 ResourcesManager* ResourcesManager::instance = nullptr ;
263265}
264266
265267
266- #endif // RESOURCESMANGER_HPP
268+ #endif // RESOURCESMANAGER_HPP
0 commit comments