sdl2 c program on wayland doesn't show window

89 views Asked by At

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

0

There are 0 answers