mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41:51 +00:00
add 'system.preserve-assets-during-frame' setting
This commit is contained in:
parent
ded0964827
commit
31cb9ebd23
5 changed files with 19 additions and 9 deletions
|
|
@ -1,13 +1,17 @@
|
|||
#include "Assets.hpp"
|
||||
|
||||
Assets::Assets(util::ObjectsKeeper& vault) : vault(vault) {
|
||||
Assets::Assets(util::ObjectsKeeper* vault) : vault(vault) {
|
||||
}
|
||||
|
||||
Assets::~Assets() {
|
||||
if (vault == nullptr) {
|
||||
return;
|
||||
}
|
||||
for (auto& [_, map] : assets) {
|
||||
for (auto& [__, asset] : map) {
|
||||
vault.keepAlive(std::move(asset));
|
||||
vault->keepAlive(std::move(asset));
|
||||
}
|
||||
map.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,14 +65,14 @@ namespace assetload {
|
|||
}
|
||||
|
||||
class Assets {
|
||||
util::ObjectsKeeper& vault;
|
||||
util::ObjectsKeeper* vault;
|
||||
std::vector<TextureAnimation> animations;
|
||||
|
||||
using assets_map = std::unordered_map<std::string, std::shared_ptr<void>>;
|
||||
std::unordered_map<std::type_index, assets_map> assets;
|
||||
std::vector<assetload::setupfunc> setupFuncs;
|
||||
public:
|
||||
Assets(util::ObjectsKeeper& vault);
|
||||
Assets(util::ObjectsKeeper* vault);
|
||||
Assets(const Assets&) = delete;
|
||||
~Assets();
|
||||
|
||||
|
|
@ -82,8 +82,8 @@ public:
|
|||
template <class T>
|
||||
void store(std::unique_ptr<T> asset, const std::string& name) {
|
||||
auto& dst = assets[typeid(T)][name];
|
||||
if (dst != nullptr) {
|
||||
vault.keepAlive(std::move(dst));
|
||||
if (vault != nullptr && dst != nullptr) {
|
||||
vault->keepAlive(std::move(dst));
|
||||
}
|
||||
dst.reset(asset.release());
|
||||
}
|
||||
|
|
@ -91,8 +91,8 @@ public:
|
|||
template <class T>
|
||||
void store(std::shared_ptr<T> asset, const std::string& name) {
|
||||
auto& dst = assets[typeid(T)][name];
|
||||
if (dst != nullptr) {
|
||||
vault.keepAlive(std::move(dst));
|
||||
if (vault != nullptr && dst != nullptr) {
|
||||
vault->keepAlive(std::move(dst));
|
||||
}
|
||||
dst = std::move(asset);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,9 @@ void AssetsManagement::loadAssets(Content* content) {
|
|||
logger.info() << "loading assets";
|
||||
Shader::preprocessor->setPaths(&paths.resPaths);
|
||||
|
||||
auto new_assets = std::make_unique<Assets>(assetsVault);
|
||||
auto new_assets = std::make_unique<Assets>(
|
||||
settings.system.preserveAssetsDuringFrame.get() ? &assetsVault : nullptr
|
||||
);
|
||||
AssetsLoader loader(engine, *new_assets, paths.resPaths);
|
||||
AssetsLoader::addDefaults(loader, content);
|
||||
|
||||
|
|
|
|||
|
|
@ -100,6 +100,7 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
|
|||
|
||||
builder.addSection("system");
|
||||
builder.add("max-bg-asset-loaders", &settings.system.maxBgAssetLoaders);
|
||||
builder.add("preserve-assets-during-frame", &settings.system.preserveAssetsDuringFrame);
|
||||
}
|
||||
|
||||
dv::value SettingsHandler::getValue(const std::string& name) const {
|
||||
|
|
|
|||
|
|
@ -122,7 +122,10 @@ struct NetworkSettings {
|
|||
};
|
||||
|
||||
struct SystemSettings {
|
||||
/// @brief Max background assets loaders
|
||||
IntegerSetting maxBgAssetLoaders {3, -4, 16};
|
||||
/// @brief Preserve assets during current frame from being destroyed
|
||||
FlagSetting preserveAssetsDuringFrame {true};
|
||||
};
|
||||
|
||||
struct EngineSettings {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue