Skip to content

Commit 05ddec0

Browse files
committed
Cherry pick personal branch
1 parent 2aacf57 commit 05ddec0

File tree

1 file changed

+77
-75
lines changed

1 file changed

+77
-75
lines changed

src/Engine/ResourcesManager.hpp

Lines changed: 77 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,41 @@
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

1213
namespace 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

Comments
 (0)