diff options
Diffstat (limited to 'gui.c')
-rw-r--r-- | gui.c | 65 |
1 files changed, 65 insertions, 0 deletions
@@ -0,0 +1,65 @@ + + +/* mention the SDL2 documentation at http://wiki.libsdl.org/APIByCategory */ + + +#include <SDL2/SDL.h> +#include <stdbool.h> + + +void gui_run(void) { + + bool quit = false; + SDL_Event event; + SDL_Window* window; + SDL_Renderer* renderer; + SDL_Texture* texture; + uint32_t* pixels; + + // init SDL2 and create window + SDL_Init(SDL_INIT_VIDEO); + window = SDL_CreateWindow("LimoX", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, + 0 + ); + + // output video driver to stderr + fprintf(stderr, "SDL2 video driver: %s\n", SDL_GetCurrentVideoDriver()); + + // create and initialize renderer, texture and pixel buffer + renderer = SDL_CreateRenderer(window, -1, 0); + texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, + SDL_TEXTUREACCESS_STATIC, 640, 480); + pixels = malloc(sizeof(uint32_t) * 640 * 480); + memset(pixels, 255, 640 * 480 * sizeof(uint32_t)); + + // handle failed window creation + if (window == NULL) { + fprintf(stderr, "Failed to create SDL2 window!\n"); + return; + } else { + while (!quit) { + SDL_UpdateTexture(texture, NULL, pixels, 640 * sizeof(uint32_t)); + SDL_WaitEvent(&event); + switch (event.type) + { + case SDL_QUIT: + quit = true; + break; + } + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, NULL, NULL); + SDL_RenderPresent(renderer); + } + SDL_DestroyWindow(window); + } + + free(pixels); + + // TODO this seems to end in memory access errors but ... why? + //SDL_DestroyTexture(texture); + //SDL_DestroyRenderer(renderer); + + SDL_Quit(); + +} |