#include "M_game.h" int M_initGame(M_Game *game, const char *window_title) { game->window_width = 1280; game->window_height = 720; SDL_Init( SDL_INIT_VIDEO ); game->window = SDL_CreateWindow( window_title, game->window_width, game->window_height, SDL_WINDOW_OPENGL ); M_setupProjection(90.0f, ((float)game->window_width)/((float)game->window_height), &game->render_info); game->block_atlas = M_createBlockAtlas(); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); game->gpu = SDL_GL_CreateContext(game->window); SDL_GL_MakeCurrent(game->window, game->gpu); game->running = 1; int version = gladLoadGL((GLADloadfunc)SDL_GL_GetProcAddress); if (version == 0) { return 1; } game->event_handler = SDL_CreateThread(M_handleEvents, "eventHandler", (void*)game); glClearColor(0.0f, 0.25f, 0.5f, 1.0f); glEnable(GL_DEPTH_TEST); return 0; } int M_killGame(M_Game *game) { SDL_WaitThread(game->event_handler, NULL); SDL_Quit(); return 0; } int SDLCALL M_handleEvents(void* arg) { M_Game *game = arg; SDL_Event event; while (game->running) { SDL_PollEvent(&event); switch (event.type) { case SDL_EVENT_QUIT: game->running = 0; break; } SDL_Delay(1); } return 0; }