Files
UnleashedRecomp-hedge-dev/UnleashedRecomp/app.cpp
Skyth (Asilkan) fd009bcada Sync render thread present with main thread. (#62)
* Experimenting with syncing the render thread.

* Separate wait functions for swap chains.

* Sync render thread present to the main thread.

* Move present to main thread and frame limit after presenting.

* g_next -> s_next

* Fix Vulkan validation errors.

* Make max frame latency configurable.

* Fix loading thread breaking waitable swap chain order.
2024-12-25 16:29:15 +03:00

63 lines
1.3 KiB
C++

#include <app.h>
#include <gpu/video.h>
#include <install/installer.h>
#include <kernel/function.h>
#include <ui/game_window.h>
#include <patches/audio_patches.h>
#include <user/config.h>
#include <os/process.h>
void App::Restart(std::vector<std::string> restartArgs)
{
os::process::StartProcess(os::process::GetExecutablePath(), restartArgs, os::process::GetWorkingDirectory());
Exit();
}
void App::Exit()
{
Config::Save();
#ifdef _WIN32
timeEndPeriod(1);
#endif
std::_Exit(0);
}
// CApplication::Ctor
PPC_FUNC_IMPL(__imp__sub_824EB490);
PPC_FUNC(sub_824EB490)
{
App::s_isInit = true;
App::s_isMissingDLC = !Installer::checkAllDLC(GetGamePath());
App::s_language = Config::Language;
__imp__sub_824EB490(ctx, base);
}
// CApplication::Update
PPC_FUNC_IMPL(__imp__sub_822C1130);
PPC_FUNC(sub_822C1130)
{
Video::WaitOnSwapChain();
// Correct small delta time errors.
if (Config::FPS >= FPS_MIN && Config::FPS < FPS_MAX)
{
double targetDeltaTime = 1.0 / Config::FPS;
if (abs(ctx.f1.f64 - targetDeltaTime) < 0.00001)
ctx.f1.f64 = targetDeltaTime;
}
App::s_deltaTime = ctx.f1.f64;
SDL_PumpEvents();
SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT);
GameWindow::Update();
AudioPatches::Update(App::s_deltaTime);
__imp__sub_822C1130(ctx, base);
}