Отображение окна SDL2
Пытаюсь начать писать проект с использованием SDL2 на С. На прошлой ОС (и текущая и прошлая Ubuntu) всё получилось настроить, но сейчас почему-то не показывается окно приложения при запуске. Ошибок никаких не выдаёт, пишет, что всё хорошо, на зависимости или CMake тоже не ругается, но окно не показывает. Есть предположение, что накосячил с установкой SDL2, потому устанавливал и локально в папочку SDL и с помощью apt-get, но в итоге SDL удалил, что всё равно не помогло.
main.c
#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdbool.h>
#define WINDOW_WIDTH 640
#define WINDOW_HEIGHT 480
#define BACKGROUND_COLOR 0x353535FF
void *scp(void *p)
{
if (p == NULL)
{
printf("SDL Error: %s\n", SDL_GetError());
exit(1);
}
return p;
}
int scc(int code)
{
if (code < 0)
{
printf("SDL Error: %s\n", SDL_GetError());
exit(1);
}
return code;
}
int main()
{
scc(SDL_Init(SDL_INIT_VIDEO));
SDL_Window *window = scp(SDL_CreateWindow("Hello World!",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_RESIZABLE));
SDL_Renderer *const renderer = scp(SDL_CreateRenderer(
window, -1,
SDL_RENDERER_SOFTWARE));
scc(SDL_RenderSetLogicalSize(renderer, WINDOW_WIDTH, WINDOW_HEIGHT));
SDL_Event e;
bool quit = false;
SDL_ShowWindow(window);
while (!quit)
{
while (SDL_PollEvent(&e))
{
if (e.type == SDL_QUIT)
{
quit = true;
}
if (e.type == SDL_KEYDOWN)
{
quit = true;
}
if (e.type == SDL_MOUSEBUTTONDOWN)
{
quit = true;
}
}
SDL_SetRenderDrawColor(renderer, (BACKGROUND_COLOR >> 24) & 0xFF, (BACKGROUND_COLOR >> 16) & 0xFF, (BACKGROUND_COLOR >> 8) & 0xFF, BACKGROUND_COLOR & 0xFF);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(mygame)
# Create an option to switch between a system sdl library and a vendored sdl library
option(MYGAME_VENDORED "Use vendored libraries" OFF)
if(MYGAME_VENDORED)
add_subdirectory(vendored/sdl EXCLUDE_FROM_ALL)
else()
# 1. Look for a SDL2 package, 2. look for the SDL2 component and 3. fail if none can be found
find_package(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2)
# 1. Look for a SDL2 package, 2. Look for the SDL2maincomponent and 3. DO NOT fail when SDL2main is not available
find_package(SDL2 REQUIRED CONFIG COMPONENTS SDL2main)
endif()
# Create your game executable target as usual
add_executable(mygame main.c)
# SDL2::SDL2main may or may not be available. It is e.g. required by Windows GUI applications
if(TARGET SDL2::SDL2main)
# It has an implicit dependency on SDL2 functions, so it MUST be added before SDL2::SDL2 (or SDL2::SDL2-static)
target_link_libraries(mygame PRIVATE SDL2::SDL2main)
endif()
# Link to the actual SDL2 library. SDL2::SDL2 is the shared SDL library, SDL2::SDL2-static is the static SDL libarary.
target_link_libraries(mygame PRIVATE SDL2::SDL2)
CmakePresets.json
{
"version": 8,
"configurePresets": [
{
"name": "Configure preset using toolchain file",
"displayName": "Configure preset using toolchain file",
"description": "Sets Ninja generator, build and install directory",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_TOOLCHAIN_FILE": "",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
}
}
]
}
Пробовал спрашивать у chatgpt, говорит, что всё должно быть нормально. Даже дрова проверял