diff options
author | xengineering <me@xengineering.eu> | 2022-10-08 20:33:41 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2022-10-08 20:34:00 +0200 |
commit | 27879d12f5a9f00b7c6b0d8fb9047710d82046bf (patch) | |
tree | dc1b83321eb029d800633c199ee0252689e3589f | |
parent | 413e6f664f460a342124103eeb4a5500ca3a5758 (diff) | |
download | limox-27879d12f5a9f00b7c6b0d8fb9047710d82046bf.tar limox-27879d12f5a9f00b7c6b0d8fb9047710d82046bf.tar.zst limox-27879d12f5a9f00b7c6b0d8fb9047710d82046bf.zip |
Fix SDL2 window creation on Wayland
See this post: https://github.com/libsdl-org/SDL/issues/6074
It seems like SDL2 does not show an empty window on Wayland systems
if there is nothing drawn on this. Thus this commit adds an empty white
pixel buffer.
-rw-r--r-- | sdl2.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -2,8 +2,6 @@ /* mention the SDL2 documentation at http://wiki.libsdl.org/APIByCategory */ -/* WARNING this seems to be not working on Wayland! */ - #include <SDL2/SDL.h> #include <stdbool.h> @@ -17,6 +15,9 @@ 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); @@ -28,12 +29,20 @@ void gui_run(void) { // 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) { @@ -41,10 +50,16 @@ void gui_run(void) { quit = true; break; } + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, NULL, NULL); + SDL_RenderPresent(renderer); } SDL_DestroyWindow(window); } + free(pixels); + SDL_DestroyTexture(texture); + SDL_DestroyRenderer(renderer); SDL_Quit(); } |