engine initialization improvements
This commit is contained in:
@@ -7,24 +7,28 @@
|
||||
|
||||
namespace wi::initializer
|
||||
{
|
||||
static bool initializationStarted = false;
|
||||
static std::atomic_bool initializationStarted{ false };
|
||||
static wi::jobsystem::context ctx;
|
||||
static wi::Timer timer;
|
||||
static std::atomic_bool systems[INITIALIZED_SYSTEM_COUNT]{};
|
||||
|
||||
void InitializeComponentsImmediate()
|
||||
{
|
||||
if (!initializationStarted)
|
||||
if (IsInitializeFinished())
|
||||
return;
|
||||
if (!initializationStarted.load())
|
||||
{
|
||||
InitializeComponentsAsync();
|
||||
}
|
||||
wi::jobsystem::Wait(ctx);
|
||||
WaitForInitializationsToFinish();
|
||||
}
|
||||
void InitializeComponentsAsync()
|
||||
{
|
||||
if (IsInitializeFinished())
|
||||
return;
|
||||
timer.record();
|
||||
|
||||
initializationStarted = true;
|
||||
initializationStarted.store(true);
|
||||
|
||||
std::string ss;
|
||||
ss += "\n[wi::initializer] Initializing Wicked Engine, please wait...\n";
|
||||
@@ -57,11 +61,11 @@ namespace wi::initializer
|
||||
wi::jobsystem::Execute(ctx, [](wi::jobsystem::JobArgs args) { wi::gpusortlib::Initialize(); systems[INITIALIZED_SYSTEM_GPUSORTLIB].store(true); });
|
||||
wi::jobsystem::Execute(ctx, [](wi::jobsystem::JobArgs args) { wi::GPUBVH::Initialize(); systems[INITIALIZED_SYSTEM_GPUBVH].store(true); });
|
||||
wi::jobsystem::Execute(ctx, [](wi::jobsystem::JobArgs args) { wi::physics::Initialize(); systems[INITIALIZED_SYSTEM_PHYSICS].store(true); });
|
||||
wi::jobsystem::Execute(ctx, [](wi::jobsystem::JobArgs args) { wi::audio::Initialize(); systems[INITIALIZED_SYSTEM_AUDIO].store(true); });
|
||||
wi::jobsystem::Execute(ctx, [](wi::jobsystem::JobArgs args) { wi::TrailRenderer::Initialize(); systems[INITIALIZED_SYSTEM_TRAILRENDERER].store(true); });
|
||||
|
||||
// Initialize this immediately:
|
||||
// Initialize these immediately:
|
||||
wi::lua::Initialize(); systems[INITIALIZED_SYSTEM_LUA].store(true);
|
||||
wi::audio::Initialize(); systems[INITIALIZED_SYSTEM_AUDIO].store(true);
|
||||
|
||||
std::thread([] {
|
||||
wi::jobsystem::Wait(ctx);
|
||||
@@ -74,11 +78,16 @@ namespace wi::initializer
|
||||
{
|
||||
if (system == INITIALIZED_SYSTEM_COUNT)
|
||||
{
|
||||
return initializationStarted && !wi::jobsystem::IsBusy(ctx);
|
||||
return initializationStarted.load() && !wi::jobsystem::IsBusy(ctx);
|
||||
}
|
||||
else
|
||||
{
|
||||
return systems[system].load();
|
||||
}
|
||||
}
|
||||
|
||||
void WaitForInitializationsToFinish()
|
||||
{
|
||||
wi::jobsystem::Wait(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user