strichmaennchen git · main
git clone https://git.christianimmanuel.de/games/strichmaennchen.gitwget https://git.christianimmanuel.de/games/strichmaennchen/archive/strichmaennchen.tar.gzplatform.c raw
#include <stdio.h>
#include "platform.h"
#include "glfuncs.h"
// ----------------------
// Globals (temporary, later modularize)
// ----------------------
bool Platform_init(Renderer* renderer) {
if (!SDL_Init(SDL_INIT_VIDEO)) {
SDL_Log("SDL init failed: %s", SDL_GetError());
return false;
}
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);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
renderer->window = SDL_CreateWindow("Game",
renderer->width, renderer->height,
SDL_WINDOW_OPENGL);
if (!renderer->window) {
SDL_Log("Window creation failed: %s", SDL_GetError());
return false;
}
SDL_SetWindowResizable(renderer->window, true);
SDL_SetWindowRelativeMouseMode(renderer->window, true);
SDL_CaptureMouse(true);
renderer->gl_context = SDL_GL_CreateContext(renderer->window);
if (!renderer->gl_context) {
SDL_Log("GL context creation failed: %s", SDL_GetError());
return false;
}
if (!SDL_GL_MakeCurrent(renderer->window, renderer->gl_context)) {
SDL_Log("SDL_GL_MakeCurrent failed: %s", SDL_GetError());
return false;
}
Glfuncs_load();
if (!glCreateShader) {
SDL_Log("glCreateShader not loaded!");
return false;
}
SDL_Log("OpenGL version: %s", glGetString(GL_VERSION));
return true;
}
void Platform_shutdown(Renderer* renderer) {
if (renderer->gl_context) SDL_GL_DestroyContext(renderer->gl_context);
if (renderer->window) SDL_DestroyWindow(renderer->window);
SDL_Quit();
}