mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-14 07:21:51 +00:00
add 'system.max-bg-asset-loaders' setting
This commit is contained in:
parent
1cf4fb8703
commit
63024133be
8 changed files with 26 additions and 9 deletions
|
|
@ -371,12 +371,13 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
std::shared_ptr<Task> AssetsLoader::startTask(runnable onDone) {
|
std::shared_ptr<Task> AssetsLoader::startTask(runnable onDone, int maxWorkers) {
|
||||||
auto pool =
|
auto pool =
|
||||||
std::make_shared<util::ThreadPool<aloader_entry, assetload::postfunc>>(
|
std::make_shared<util::ThreadPool<aloader_entry, assetload::postfunc>>(
|
||||||
"assets-loader-pool",
|
"assets-loader-pool",
|
||||||
[=]() { return std::make_shared<LoaderWorker>(this); },
|
[=]() { return std::make_shared<LoaderWorker>(this); },
|
||||||
[this](const assetload::postfunc& func) { func(&assets); }
|
[this](const assetload::postfunc& func) { func(&assets); },
|
||||||
|
maxWorkers
|
||||||
);
|
);
|
||||||
pool->setOnComplete(std::move(onDone));
|
pool->setOnComplete(std::move(onDone));
|
||||||
pool->setJobsSource([this]() -> std::optional<aloader_entry> {
|
pool->setJobsSource([this]() -> std::optional<aloader_entry> {
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ public:
|
||||||
/// @throws assetload::error
|
/// @throws assetload::error
|
||||||
void loadNext();
|
void loadNext();
|
||||||
|
|
||||||
std::shared_ptr<Task> startTask(runnable onDone);
|
std::shared_ptr<Task> startTask(runnable onDone, int maxWorkers);
|
||||||
|
|
||||||
const ResPaths& getPaths() const;
|
const ResPaths& getPaths() const;
|
||||||
aloader_func getLoader(AssetType tag);
|
aloader_func getLoader(AssetType tag);
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,9 @@
|
||||||
|
|
||||||
static debug::Logger logger("assets-management");
|
static debug::Logger logger("assets-management");
|
||||||
|
|
||||||
AssetsManagement::AssetsManagement(Engine& engine) : engine(engine) {}
|
AssetsManagement::AssetsManagement(Engine& engine)
|
||||||
|
: engine(engine), settings(engine.getSettings()) {
|
||||||
|
}
|
||||||
|
|
||||||
AssetsManagement::~AssetsManagement() {
|
AssetsManagement::~AssetsManagement() {
|
||||||
finishBackgroundLoader();
|
finishBackgroundLoader();
|
||||||
|
|
@ -36,7 +38,9 @@ AssetsLoader& AssetsManagement::acquireBackgroundLoader() {
|
||||||
backgroundLoader = std::make_unique<AssetsLoader>(
|
backgroundLoader = std::make_unique<AssetsLoader>(
|
||||||
engine, *assets, engine.getResPaths()
|
engine, *assets, engine.getResPaths()
|
||||||
);
|
);
|
||||||
backgroundLoaderTask = backgroundLoader->startTask(nullptr);
|
backgroundLoaderTask = backgroundLoader->startTask(
|
||||||
|
nullptr, settings.system.maxBgAssetLoaders.get()
|
||||||
|
);
|
||||||
return *backgroundLoader;
|
return *backgroundLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,7 +60,9 @@ void AssetsManagement::loadAssets(Content* content) {
|
||||||
// todo: before setting to true, check if GLSLExtension thread safe
|
// todo: before setting to true, check if GLSLExtension thread safe
|
||||||
bool threading = false; // look at three upper lines
|
bool threading = false; // look at three upper lines
|
||||||
if (threading) {
|
if (threading) {
|
||||||
auto task = loader.startTask([=](){});
|
auto task = loader.startTask(
|
||||||
|
[=]() {}, 0
|
||||||
|
);
|
||||||
task->waitForEnd();
|
task->waitForEnd();
|
||||||
} else {
|
} else {
|
||||||
while (loader.hasNext()) {
|
while (loader.hasNext()) {
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ class AssetsLoader;
|
||||||
class Engine;
|
class Engine;
|
||||||
class Content;
|
class Content;
|
||||||
class Task;
|
class Task;
|
||||||
|
struct EngineSettings;
|
||||||
|
|
||||||
class AssetsManagement final {
|
class AssetsManagement final {
|
||||||
public:
|
public:
|
||||||
|
|
@ -25,6 +26,7 @@ private:
|
||||||
void finishBackgroundLoader();
|
void finishBackgroundLoader();
|
||||||
|
|
||||||
Engine& engine;
|
Engine& engine;
|
||||||
|
const EngineSettings& settings;
|
||||||
std::unique_ptr<Assets> assets;
|
std::unique_ptr<Assets> assets;
|
||||||
std::unique_ptr<AssetsLoader> backgroundLoader;
|
std::unique_ptr<AssetsLoader> backgroundLoader;
|
||||||
std::shared_ptr<Task> backgroundLoaderTask;
|
std::shared_ptr<Task> backgroundLoaderTask;
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,9 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
|
||||||
builder.add("do-write-lights", &settings.debug.doWriteLights);
|
builder.add("do-write-lights", &settings.debug.doWriteLights);
|
||||||
builder.add("do-trace-shaders", &settings.debug.doTraceShaders);
|
builder.add("do-trace-shaders", &settings.debug.doTraceShaders);
|
||||||
builder.add("enable-experimental", &settings.debug.enableExperimental);
|
builder.add("enable-experimental", &settings.debug.enableExperimental);
|
||||||
|
|
||||||
|
builder.addSection("system");
|
||||||
|
builder.add("max-bg-asset-loaders", &settings.system.maxBgAssetLoaders);
|
||||||
}
|
}
|
||||||
|
|
||||||
dv::value SettingsHandler::getValue(const std::string& name) const {
|
dv::value SettingsHandler::getValue(const std::string& name) const {
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ static int l_pack_get_info(
|
||||||
auto& assetsLoader = engine->acquireBackgroundLoader();
|
auto& assetsLoader = engine->acquireBackgroundLoader();
|
||||||
std::string icon = pack.id + ".icon";
|
std::string icon = pack.id + ".icon";
|
||||||
if (!AssetsLoader::loadExternalTexture(
|
if (!AssetsLoader::loadExternalTexture(
|
||||||
assetsLoader, icon, {pack.folder / "icon"}
|
assetsLoader, icon, {pack.folder / "icon.png"}
|
||||||
)) {
|
)) {
|
||||||
icon = "gui/no_icon";
|
icon = "gui/no_icon";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,8 +60,8 @@ static int l_get_list(lua::State* L) {
|
||||||
if (!engine->isHeadless() && !AssetsLoader::loadExternalTexture(
|
if (!engine->isHeadless() && !AssetsLoader::loadExternalTexture(
|
||||||
engine->acquireBackgroundLoader(),
|
engine->acquireBackgroundLoader(),
|
||||||
icon,
|
icon,
|
||||||
{worlds[i] / "icon",
|
{worlds[i] / "icon.png",
|
||||||
worlds[i] / "preview"}
|
worlds[i] / "preview.png"}
|
||||||
)) {
|
)) {
|
||||||
icon = "gui/no_world_icon";
|
icon = "gui/no_world_icon";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,10 @@ struct UiSettings {
|
||||||
struct NetworkSettings {
|
struct NetworkSettings {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SystemSettings {
|
||||||
|
IntegerSetting maxBgAssetLoaders {3, -4, 16};
|
||||||
|
};
|
||||||
|
|
||||||
struct EngineSettings {
|
struct EngineSettings {
|
||||||
AudioSettings audio;
|
AudioSettings audio;
|
||||||
DisplaySettings display;
|
DisplaySettings display;
|
||||||
|
|
@ -125,4 +129,5 @@ struct EngineSettings {
|
||||||
UiSettings ui;
|
UiSettings ui;
|
||||||
NetworkSettings network;
|
NetworkSettings network;
|
||||||
PathfindingSettings pathfinding;
|
PathfindingSettings pathfinding;
|
||||||
|
SystemSettings system;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue