main() moved to a D function.
This commit is contained in:
parent
ef3a4c1ef6
commit
85c3347417
5 changed files with 144 additions and 65 deletions
|
@ -1,5 +1,5 @@
|
|||
cmake_minimum_required(VERSION 2.8)
|
||||
project(CloonelJump CXX)
|
||||
project(CloonelJump CXX D)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11")
|
||||
|
@ -23,7 +23,8 @@ configure_file(
|
|||
)
|
||||
|
||||
add_executable(${PROJECT_NAME}
|
||||
src/main.cpp
|
||||
src/main.d
|
||||
src/sdlinit.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
|
63
src/main.cpp
63
src/main.cpp
|
@ -1,63 +0,0 @@
|
|||
#include <SDL2/SDL.h>
|
||||
#include <iostream>
|
||||
#include "CloonelJumpConfig.h"
|
||||
#include <stdexcept>
|
||||
|
||||
namespace {
|
||||
struct InitSDLStuff {
|
||||
SDL_Window* window;
|
||||
SDL_Renderer* renderer;
|
||||
bool initialized;
|
||||
};
|
||||
|
||||
///-------------------------------------------------------------------------
|
||||
///-------------------------------------------------------------------------
|
||||
void InitSDL (InitSDLStuff& 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(GameName, 100, 100, 640, 480, 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 ClearIFN (InitSDLStuff& parInitSDL) {
|
||||
if (parInitSDL.renderer)
|
||||
SDL_DestroyRenderer(parInitSDL.renderer);
|
||||
if (parInitSDL.window)
|
||||
SDL_DestroyWindow(parInitSDL.window);
|
||||
if (parInitSDL.initialized)
|
||||
SDL_Quit();
|
||||
}
|
||||
} //unnamed namespace
|
||||
|
||||
//following http://twinklebeardev.blogspot.co.uk/2012/07/lesson-1-hello-world.html
|
||||
int main() {
|
||||
std::cout << GameName << " v" << GameVersionMajor << "." << GameVersionMinor << std::endl;
|
||||
|
||||
InitSDLStuff sdlstuff;
|
||||
try {
|
||||
InitSDL(sdlstuff);
|
||||
}
|
||||
catch (const std::runtime_error& e) {
|
||||
std::cerr << "Error during SDL2 initialization:\n";
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
|
||||
ClearIFN(sdlstuff);
|
||||
std::cout << "Quitting now" << std::endl;
|
||||
return 0;
|
||||
}
|
39
src/main.d
Normal file
39
src/main.d
Normal file
|
@ -0,0 +1,39 @@
|
|||
import std.stdio;
|
||||
|
||||
struct InitSDLStuff;
|
||||
|
||||
extern(C++) nothrow int cloonel_InitSDL ( InitSDLStuff** );
|
||||
extern(C++) nothrow void cloonel_DestroySDL ( InitSDLStuff* );
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
///-----------------------------------------------------------------------------
|
||||
int RunGame (const InitSDLStuff* parContext) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
///-----------------------------------------------------------------------------
|
||||
int main() {
|
||||
InitSDLStuff* context = null;
|
||||
int retVal = 0;
|
||||
|
||||
scope(exit) cloonel_DestroySDL(context);
|
||||
const int initRetVal = cloonel_InitSDL(&context);
|
||||
switch (initRetVal) {
|
||||
case 1:
|
||||
writeln("Error during SDL initialization");
|
||||
retVal = 1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
writeln("Wrong parameters to cloonel_InitSDL()");
|
||||
retVal = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
retVal = RunGame(context);
|
||||
break;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
94
src/sdlinit.cpp
Normal file
94
src/sdlinit.cpp
Normal file
|
@ -0,0 +1,94 @@
|
|||
#include "sdlinit.hpp"
|
||||
#include <SDL2/SDL.h>
|
||||
#include "CloonelJumpConfig.h"
|
||||
#include <stdexcept>
|
||||
|
||||
struct InitSDLStuff {
|
||||
SDL_Window* window;
|
||||
SDL_Renderer* renderer;
|
||||
bool initialized;
|
||||
};
|
||||
|
||||
namespace {
|
||||
///-------------------------------------------------------------------------
|
||||
///-------------------------------------------------------------------------
|
||||
void InitSDL (InitSDLStuff& 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(GameName, 100, 100, 640, 480, 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 ClearIFN (InitSDLStuff& parInitSDL) {
|
||||
if (parInitSDL.renderer)
|
||||
SDL_DestroyRenderer(parInitSDL.renderer);
|
||||
if (parInitSDL.window)
|
||||
SDL_DestroyWindow(parInitSDL.window);
|
||||
if (parInitSDL.initialized)
|
||||
SDL_Quit();
|
||||
}
|
||||
} //unnamed namespace
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
///following http://twinklebeardev.blogspot.co.uk/2012/07/lesson-1-hello-world.html
|
||||
///-----------------------------------------------------------------------------
|
||||
int cloonel_InitSDL (InitSDLStuff** parContext) noexcept {
|
||||
if (not parContext)
|
||||
return 2;
|
||||
|
||||
*parContext = nullptr;
|
||||
try {
|
||||
*parContext = new InitSDLStuff;
|
||||
InitSDL(**parContext);
|
||||
}
|
||||
catch(...) {
|
||||
if (*parContext) {
|
||||
ClearIFN(**parContext);
|
||||
delete *parContext;
|
||||
*parContext = nullptr;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
///-----------------------------------------------------------------------------
|
||||
void cloonel_DestroySDL (InitSDLStuff* parContext) noexcept {
|
||||
if (parContext) {
|
||||
ClearIFN(*parContext);
|
||||
delete parContext;
|
||||
}
|
||||
}
|
||||
|
||||
//int main() {
|
||||
//std::cout << GameName << " v" << GameVersionMajor << "." << GameVersionMinor << std::endl;
|
||||
|
||||
//InitSDLStuff sdlstuff;
|
||||
//try {
|
||||
//InitSDL(sdlstuff);
|
||||
//}
|
||||
//catch (const std::runtime_error& e) {
|
||||
//std::cerr << "Error during SDL2 initialization:\n";
|
||||
//std::cerr << e.what() << std::endl;
|
||||
//}
|
||||
|
||||
//ClearIFN(sdlstuff);
|
||||
//std::cout << "Quitting now" << std::endl;
|
||||
//return 0;
|
||||
//}
|
8
src/sdlinit.hpp
Normal file
8
src/sdlinit.hpp
Normal file
|
@ -0,0 +1,8 @@
|
|||
#ifndef id2ED86EA85A6843258307486DFB17FFE7
|
||||
#define id2ED86EA85A6843258307486DFB17FFE7
|
||||
|
||||
struct InitSDLStuff;
|
||||
|
||||
int cloonel_InitSDL ( InitSDLStuff** ) noexcept;
|
||||
void cloonel_DestroySDL ( InitSDLStuff* ) noexcept;
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue