Blaze/AppState.cpp

68 lines
1.6 KiB
C++

#include "AppState.h"
#include <SDL3/SDL_log.h>
#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 )->destroy( *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<int>(width),
static_cast<int>(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() );
}