Reducing memory usage

This commit is contained in:
Dynamitos
2024-08-07 21:19:33 +02:00
parent 819b541ff2
commit 64a26bfd57
37 changed files with 216 additions and 44 deletions
+2
View File
@@ -16,6 +16,8 @@ class Asset {
virtual void save(ArchiveBuffer& buffer) const = 0;
virtual void load(ArchiveBuffer& buffer) = 0;
constexpr uint64 getSize() const { return byteSize; }
bool isModified() const;
// returns the assets name
std::string getName() const;
+9 -6
View File
@@ -195,18 +195,21 @@ void AssetRegistry::initialize(const std::filesystem::path& _rootFolder, Gfx::PG
}
void AssetRegistry::loadRegistryInternal() {
List<Pair<PAsset, ArchiveBuffer>> peeked;
Array<Pair<PAsset, ArchiveBuffer>> peeked;
{
std::unique_lock l(get().assetLock);
peeked = peekFolder(assetRoot);
}
uint64 assetSize = 0;
for (auto& [asset, buffer] : peeked) {
asset->load(buffer);
assetSize += asset->getSize();
}
std::cout << "Done loading " << assetSize << std::endl;
}
List<Pair<PAsset, ArchiveBuffer>> AssetRegistry::peekFolder(AssetFolder* folder) {
List<Pair<PAsset, ArchiveBuffer>> peeked;
Array<Pair<PAsset, ArchiveBuffer>> AssetRegistry::peekFolder(AssetFolder* folder) {
Array<Pair<PAsset, ArchiveBuffer>> peeked;
for (const auto& entry : std::filesystem::directory_iterator(rootFolder / folder->folderPath)) {
const auto& stem = entry.path().stem().string();
if (entry.is_directory()) {
@@ -216,8 +219,8 @@ List<Pair<PAsset, ArchiveBuffer>> AssetRegistry::peekFolder(AssetFolder* folder)
folder->children[stem] = new AssetFolder(folder->folderPath + "/" + stem);
}
auto temp = peekFolder(folder->children[stem]);
for (auto t : temp) {
peeked.add(t);
for (auto& t : temp) {
peeked.add(std::move(t));
}
continue;
}
@@ -273,7 +276,7 @@ Pair<PAsset, ArchiveBuffer> AssetRegistry::peekAsset(ArchiveBuffer& buffer) {
default:
throw new std::logic_error("Unknown Identifier");
}
return {asset, buffer};
return {asset, std::move(buffer)};
}
+1 -1
View File
@@ -62,7 +62,7 @@ class AssetRegistry {
private:
void initialize(const std::filesystem::path& rootFolder, Gfx::PGraphics graphics);
void loadRegistryInternal();
List<Pair<PAsset, ArchiveBuffer>> peekFolder(AssetFolder* folder);
Array<Pair<PAsset, ArchiveBuffer>> peekFolder(AssetFolder* folder);
Pair<PAsset, ArchiveBuffer> peekAsset(ArchiveBuffer& buffer);
void saveRegistryInternal();
void saveFolder(const std::filesystem::path& folderPath, AssetFolder* folder);
+1
View File
@@ -19,6 +19,7 @@ void MaterialAsset::load(ArchiveBuffer& buffer) {
material = new Material();
material->load(buffer);
material->compile();
byteSize = material->getCPUSize();
}
PMaterialInstanceAsset MaterialAsset::instantiate(const InstantiationParameter& params) {
@@ -28,4 +28,6 @@ void MaterialInstanceAsset::load(ArchiveBuffer& buffer) {
material->load(buffer);
baseMaterial = AssetRegistry::findMaterial(folder, id);
material->setBaseMaterial(baseMaterial);
byteSize = material->getCPUSize();
}
+6 -1
View File
@@ -14,4 +14,9 @@ MeshAsset::~MeshAsset() {}
void MeshAsset::save(ArchiveBuffer& buffer) const { Serialization::save(buffer, meshes); }
void MeshAsset::load(ArchiveBuffer& buffer) { Serialization::load(buffer, meshes); }
void MeshAsset::load(ArchiveBuffer& buffer) { Serialization::load(buffer, meshes);
byteSize = 0;
for (const auto& mesh : meshes) {
byteSize += mesh->getCPUSize();
}
}
+2
View File
@@ -62,6 +62,8 @@ void TextureAsset::load(ArchiveBuffer& buffer) {
}
ktxTexture_Destroy(ktxTexture(ktxHandle));
byteSize = sizeof(TextureAsset) + ktxData.size();
}
uint32 TextureAsset::getWidth() { return texture->getWidth(); }