summaryrefslogtreecommitdiff
path: root/gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'gui.c')
-rw-r--r--gui.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/gui.c b/gui.c
new file mode 100644
index 0000000..04a53b3
--- /dev/null
+++ b/gui.c
@@ -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();
+
+}