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