#include "AppState.h" #include #include "GlobalMemory.h" #include "MiscData.h" #include "RenderDevice.h" bool AppState::isInit() const { return window and renderDevice and renderDevice->isInit(); } void AppState::destroy() { if (!isInit()) return; renderDevice->waitIdle(); Take(miscData)->cleanup(*renderDevice); Take(renderDevice)->destroy(); SDL_DestroyWindow(Take(window)); } AppState::AppState(SDL_Window* window, RenderDevice* renderDevice, MiscData* miscData) : window{ window } , renderDevice{ renderDevice } , miscData{ miscData } { } AppState* CreateAppState(GlobalMemory* memory, uint32_t const width, uint32_t const height) { SDL_Window* window = SDL_CreateWindow( "Blaze Test", static_cast(width), static_cast(height), SDL_WINDOW_VULKAN); if (!window) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s", SDL_GetError()); return nullptr; } auto state = memory->getState(); RenderDevice* renderDevice = CreateRenderDevice(memory, { .window = window }); if (!renderDevice->isInit()) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "RenderDevice failed to init"); return nullptr; } (void)state; auto* miscDataAllocation = memory->allocate(sizeof(MiscData)); MiscData* miscData = new(miscDataAllocation) MiscData{}; miscData->init(*renderDevice); auto* allocation = memory->allocate(sizeof(AppState)); AppState* appState = new(allocation) AppState{ window, renderDevice, miscData }; return appState; } AppState::~AppState() { ASSERT(!isInit()); }