diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2020-11-20 16:20:00 -0500 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2020-11-20 16:20:00 -0500 |
commit | c376f6f53f737d6220206baa323c0bc62d48a9f0 (patch) | |
tree | 364d5916797718b5339271f768c883e5fd799b67 /main.c |
opening a window
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 75 |
1 files changed, 75 insertions, 0 deletions
@@ -0,0 +1,75 @@ +#ifdef __GNUC__ +#define no_warn_start _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wpedantic\"") \ + _Pragma("GCC diagnostic ignored \"-Wsign-conversion\"") \ + _Pragma("GCC diagnostic ignored \"-Wsign-compare\"") \ + _Pragma("GCC diagnostic ignored \"-Wconversion\"") \ + _Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"") \ + _Pragma("GCC diagnostic ignored \"-Wunused-function\"") + +#define no_warn_end _Pragma("GCC diagnostic pop") +#else +#define no_warn_start +#define no_warn_end +#endif + +no_warn_start +#include <SDL2/SDL.h> +no_warn_end +#include <GL/gl.h> +#include <stdbool.h> + +static void die(char const *fmt, ...) { + char buf[256] = {0}; + + va_list args; + va_start(args, fmt); + vsnprintf(buf, sizeof buf - 1, fmt, args); + va_end(args); + + // show a message box, and if that fails, print to stderr + if (SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", buf, NULL) < 0) { + fprintf(stderr, "%s\n", buf); + } + + exit(EXIT_FAILURE); +} + + +int main(void) { + if (SDL_Init(SDL_INIT_VIDEO) < 0) + die("%s", SDL_GetError()); + + SDL_Window *window = SDL_CreateWindow("ted", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1280, 720, SDL_WINDOW_SHOWN|SDL_WINDOW_OPENGL); + if (!window) + die("%s", SDL_GetError()); + + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + SDL_GLContext *glctx = SDL_GL_CreateContext(window); + if (!glctx) { + die("%s", SDL_GetError()); + } + + SDL_GL_SetSwapInterval(1); // vsync + + + bool quit = false; + while (!quit) { + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + quit = true; + break; + } + } + + glClearColor(0,0,0,1); + glClear(GL_COLOR_BUFFER_BIT); + + SDL_GL_SwapWindow(window); + } + + return 0; +} |