feat: Add window class
This commit is contained in:
+21
-33
@@ -1,7 +1,6 @@
|
||||
#include <algorithm>
|
||||
#include <chrono>
|
||||
#include <exception>
|
||||
#include <SDL_vulkan.h>
|
||||
#include <thread>
|
||||
#include <stdexcept>
|
||||
#include <destrum/App.h>
|
||||
@@ -52,23 +51,15 @@ void App::init(const AppParams& params)
|
||||
TracySetProgramName(params.appName.c_str());
|
||||
AssetFS::GetInstance().Init(params.exeDir);
|
||||
|
||||
window = SDL_CreateWindow(
|
||||
params.windowTitle.c_str(),
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
params.windowSize.x,
|
||||
params.windowSize.y,
|
||||
SDL_WINDOW_VULKAN);
|
||||
window.Create({
|
||||
.title = params.windowTitle,
|
||||
.size = params.windowSize,
|
||||
.mode = params.windowMode,
|
||||
.maximized = params.startMaximized,
|
||||
});
|
||||
|
||||
if (!window) {
|
||||
spdlog::error("Failed to create window. SDL Error: {}", SDL_GetError());
|
||||
throw std::runtime_error(
|
||||
"Failed to create window: " + std::string{SDL_GetError()});
|
||||
}
|
||||
SDL_SetWindowResizable(window, SDL_TRUE);
|
||||
|
||||
gfxDevice.init(window, params.appName, false);
|
||||
imguiPass.init(window, gfxDevice);
|
||||
gfxDevice.init(window.GetHandle(), params.appName, false);
|
||||
imguiPass.init(window.GetHandle(), gfxDevice);
|
||||
|
||||
InputManager::GetInstance().Init();
|
||||
Time::GetInstance().Update();
|
||||
@@ -144,16 +135,16 @@ void App::run()
|
||||
break;
|
||||
}
|
||||
|
||||
if (event.type == SDL_WINDOWEVENT)
|
||||
window.ProcessEvent(event);
|
||||
if (window.ConsumeResized())
|
||||
{
|
||||
switch (event.window.event)
|
||||
{
|
||||
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
||||
case SDL_WINDOWEVENT_RESIZED:
|
||||
resizePending = true;
|
||||
lastResizeTime = std::chrono::steady_clock::now();
|
||||
break;
|
||||
}
|
||||
resizePending = true;
|
||||
lastResizeTime = std::chrono::steady_clock::now();
|
||||
}
|
||||
if (window.ConsumeCloseRequested())
|
||||
{
|
||||
isRunning = false;
|
||||
break;
|
||||
}
|
||||
|
||||
const bool keyboardEvent =
|
||||
@@ -290,9 +281,9 @@ if (!isRunning) break;
|
||||
continue;
|
||||
}
|
||||
|
||||
int w = 0;
|
||||
int h = 0;
|
||||
SDL_Vulkan_GetDrawableSize(window, &w, &h);
|
||||
const glm::ivec2 drawableSize = window.GetDrawableSize();
|
||||
const int w = drawableSize.x;
|
||||
const int h = drawableSize.y;
|
||||
|
||||
if (w == 0 || h == 0)
|
||||
{
|
||||
@@ -362,10 +353,7 @@ void App::cleanup()
|
||||
attempt([this] { resources.cleanup(gfxDevice); });
|
||||
attempt([this] { gfxDevice.cleanup(); });
|
||||
|
||||
if (window) {
|
||||
SDL_DestroyWindow(window);
|
||||
window = nullptr;
|
||||
}
|
||||
window.Destroy();
|
||||
|
||||
AssetFS::GetInstance().Reset();
|
||||
customInitStarted = false;
|
||||
|
||||
Reference in New Issue
Block a user