I recently switched to wayland, and whenever I try to spawn a window with SDL nothing happens:
#include <SDL2/SDL.h>
#include <stdbool.h>
#include <stdio.h>
const int SCREEN_HEIGHT = 1080;
const int SCREEN_WIDTH = 1920;
bool init(SDL_Window *window, SDL_Renderer *renderer);
void quit(SDL_Window *window, SDL_Renderer *renderer);
int main(int argc, char **argv) {
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
if (!init(window, renderer)) {
printf("init fail :( %s\n", SDL_GetError());
quit(window, renderer);
return 1;
}
bool quitGame = false;
while (!quitGame) {
SDL_RenderClear(renderer);
SDL_Rect greenSquare = {SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, 500, 500};
SDL_RenderFillRect(renderer, &greenSquare);
SDL_RenderPresent(renderer);
SDL_Event e;
while (SDL_PollEvent(&e)) {
switch (e.type) {
case SDL_QUIT:
quitGame = true;
break;
case SDL_KEYDOWN:
if (e.key.keysym.sym == SDLK_j) {
printf("hi!");
}
break;
}
}
SDL_Delay(100);
}
return 0;
}
bool init(SDL_Window *window, SDL_Renderer *renderer) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("sdl init fail :( %s\n", SDL_GetError());
return false;
}
if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1")) {
printf("warning: linear texture filtering not enabled :(");
}
window = SDL_CreateWindow("test window", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH,
SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (window == NULL) {
printf("window fail :( %s\n", SDL_GetError());
return false;
}
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
printf("renderer fail :( %s\n", SDL_GetError());
return false;
}
SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF);
return true;
}
void quit(SDL_Window *window, SDL_Renderer *renderer) {
SDL_DestroyRenderer(renderer);
renderer = NULL;
SDL_DestroyWindow(window);
window = NULL;
SDL_Quit();
printf("bye \\(;-\\;)");
}
I've tried adding a renderer and event loop, but no window would appear. I don't get any errors while compiling and running. I've also tried changing the SDL_VIDEODRIVER environment variable.
Everything is up to date, and when I run the program I get no errors. I checked with printf debugging, and the event loop is entered. I've tried to diagnose the problem myself, but everything I found said that wayland requires an event loop and a presented buffer, which I think I have.
sway 1:1.8.1-5 on wayland 1.22.0-1 on linux 6.7.4.arch1-1