Reducing memory usage
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)};
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +62,8 @@ void TextureAsset::load(ArchiveBuffer& buffer) {
|
||||
}
|
||||
|
||||
ktxTexture_Destroy(ktxTexture(ktxHandle));
|
||||
|
||||
byteSize = sizeof(TextureAsset) + ktxData.size();
|
||||
}
|
||||
|
||||
uint32 TextureAsset::getWidth() { return texture->getWidth(); }
|
||||
|
||||
Reference in New Issue
Block a user