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();  }  | 
