Code refactored into different files.
This commit is contained in:
parent
26c50fe1d0
commit
2429229a95
8 changed files with 217 additions and 46 deletions
74
src/sdlmain.cpp
Normal file
74
src/sdlmain.cpp
Normal file
|
@ -0,0 +1,74 @@
|
|||
#include "sdlmain.hpp"
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
namespace cloonel {
|
||||
struct SDLMain::LocalData {
|
||||
SDL_Window* window;
|
||||
SDL_Renderer* renderer;
|
||||
bool initialized;
|
||||
};
|
||||
|
||||
///------------------------------------------------------------------------
|
||||
///------------------------------------------------------------------------
|
||||
SDLMain::SDLMain (const char* parGameName, int parWidth, int parHeight) :
|
||||
m_gameName(parGameName),
|
||||
m_defWidth(parWidth),
|
||||
m_defHeight(parHeight)
|
||||
{
|
||||
}
|
||||
|
||||
///------------------------------------------------------------------------
|
||||
///------------------------------------------------------------------------
|
||||
SDLMain::~SDLMain() noexcept {
|
||||
ClearIFN(*m_localData);
|
||||
}
|
||||
|
||||
///------------------------------------------------------------------------
|
||||
///------------------------------------------------------------------------
|
||||
void SDLMain::Init() {
|
||||
if (not m_localData->initialized)
|
||||
InitSDL(*m_localData);
|
||||
}
|
||||
|
||||
///------------------------------------------------------------------------
|
||||
///------------------------------------------------------------------------
|
||||
void SDLMain::InitSDL (LocalData& parInitSDL) {
|
||||
parInitSDL.window = nullptr;
|
||||
parInitSDL.renderer = nullptr;
|
||||
parInitSDL.initialized = false;
|
||||
|
||||
if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
|
||||
throw std::runtime_error(SDL_GetError());
|
||||
parInitSDL.initialized = true;
|
||||
|
||||
SDL_Window* const win = SDL_CreateWindow(m_gameName.c_str(), 100, 100, m_defWidth, m_defHeight, SDL_WINDOW_SHOWN);
|
||||
if (!win)
|
||||
throw std::runtime_error(SDL_GetError());
|
||||
parInitSDL.window = win;
|
||||
|
||||
SDL_Renderer* const renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||
if (!renderer)
|
||||
throw std::runtime_error(SDL_GetError());
|
||||
parInitSDL.renderer = renderer;
|
||||
}
|
||||
|
||||
///------------------------------------------------------------------------
|
||||
///------------------------------------------------------------------------
|
||||
void SDLMain::ClearIFN (LocalData& parInitSDL) noexcept {
|
||||
if (parInitSDL.renderer)
|
||||
SDL_DestroyRenderer(parInitSDL.renderer);
|
||||
if (parInitSDL.window)
|
||||
SDL_DestroyWindow(parInitSDL.window);
|
||||
if (parInitSDL.initialized)
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
///------------------------------------------------------------------------
|
||||
///------------------------------------------------------------------------
|
||||
SDL_Renderer* SDLMain::GetRenderer() {
|
||||
if (m_localData->initialized)
|
||||
return m_localData->renderer;
|
||||
else
|
||||
return nullptr;
|
||||
}
|
||||
} //namespace cloonel
|
Loading…
Add table
Add a link
Reference in a new issue