Updated to SDL3.

This commit is contained in:
Ulysse Cura 2026-07-25 02:00:44 +02:00
parent 0524f6ada9
commit 54b15900b2
10 changed files with 49 additions and 43 deletions

View File

@ -11,9 +11,9 @@ CORE_SOURCES := \
# Compiler and flags
CORE_CC = gcc
ifeq ($(RELEASE), 1)
CORE_CFLAGS = --std=c17 --pedantic -O3 -DASSET_FILE_NAME=\"$(ASSET_OUTPUT)\" $(shell pkg-config --cflags sdl2) # RELEASE
CORE_CFLAGS = --std=c17 --pedantic -O3 -DASSET_FILE_NAME=\"$(ASSET_OUTPUT)\" -D_GNU_SOURCE=1 $(shell pkg-config --cflags sdl3) # RELEASE
else
CORE_CFLAGS = --std=c17 --pedantic -O0 -g -DDEBUG=1 -DASSET_FILE_NAME=\"$(ASSET_OUTPUT)\" $(shell pkg-config --cflags sdl2) \
CORE_CFLAGS = --std=c17 --pedantic -O0 -g -DDEBUG=1 -DASSET_FILE_NAME=\"$(ASSET_OUTPUT)\" -D_GNU_SOURCE=1 $(shell pkg-config --cflags sdl3) \
-Wall -Wno-missing-braces -Wextra -Wno-missing-field-initializers \
-Wformat=2 -Wswitch-default -Wswitch-enum -Wcast-align \
-Wpointer-arith -Wbad-function-cast -Wstrict-overflow=5 \
@ -30,7 +30,7 @@ CORE_AR = ar
CORE_ARFLAGS =
# Used in final linking.
CORE_DEPS_FLAGS = $(shell pkg-config --libs sdl2)
CORE_DEPS_FLAGS = $(shell pkg-config --libs sdl3)
# Deduce objects
CORE_OBJECTS = $(CORE_SOURCES:%.c=$(BUILD_DIR)/$(CORE_DIR)/%.o)

View File

@ -1,6 +1,6 @@
#include "asset_manager.h"
#include <SDL2/SDL_render.h>
#include <SDL3/SDL_render.h>
#include <stdarg.h>
#include <string.h>
#include "memory_alloc.h"
@ -158,31 +158,31 @@ static inline int load_texture(asset_manager_t *asset_manager, asset_t *asset, a
return EXIT_FAILURE;
}
SDL_Surface *tmp_surface = SDL_CreateRGBSurfaceWithFormat(0, width, height, 16, SDL_PIXELFORMAT_RGB565);
SDL_Surface *tmp_surface = SDL_CreateSurface(width, height, SDL_PIXELFORMAT_RGB565);
if(!tmp_surface)
{
error_printf("Failed to create temporary surface : %s", SDL_GetError());
return EXIT_FAILURE;
}
if(SDL_LockSurface(tmp_surface))
if(!SDL_LockSurface(tmp_surface))
{
printf("Failed to lock temporary surface : %s", SDL_GetError());
SDL_FreeSurface(tmp_surface);
error_printf("Failed to lock temporary surface : %s", SDL_GetError());
SDL_DestroySurface(tmp_surface);
return EXIT_FAILURE;
}
if(fread(tmp_surface->pixels, sizeof(uint16_t), width * height, asset_manager->asset_file) != width * height)
{
printf("Failed to read asset file.");
SDL_FreeSurface(tmp_surface);
error_printf("Failed to read asset file.");
SDL_DestroySurface(tmp_surface);
return EXIT_FAILURE;
}
if(SDL_SetColorKey(tmp_surface, SDL_TRUE, SDL_MapRGB(tmp_surface->format, 0xFF, 0x00, 0xFF)))
if(!SDL_SetSurfaceColorKey(tmp_surface, true, 0xF81F))
{
error_printf("Failed to set color key of temporary surface : %s", SDL_GetError());
SDL_FreeSurface(tmp_surface);
SDL_DestroySurface(tmp_surface);
return EXIT_FAILURE;
}
@ -190,11 +190,11 @@ static inline int load_texture(asset_manager_t *asset_manager, asset_t *asset, a
if(!asset->data.texture)
{
error_printf("Failed to create texture from temporary surface : %s", SDL_GetError());
SDL_FreeSurface(tmp_surface);
SDL_DestroySurface(tmp_surface);
return EXIT_FAILURE;
}
SDL_FreeSurface(tmp_surface);
SDL_DestroySurface(tmp_surface);
return EXIT_SUCCESS;
}
@ -285,7 +285,11 @@ int asset_manager_draw_texture(texture_t *texture, rect_t *src_rect, rect_t *dst
dst_rect->w = -dst_rect->w;
}
if(SDL_RenderCopy(renderer, texture, src_rect, dst_rect))
frect_t src_frect, dst_frect;
rect_to_frect(src_rect, &src_frect);
rect_to_frect(dst_rect, &dst_frect);
if(!SDL_RenderTexture(renderer, texture, &src_frect, &dst_frect))
{
error_printf("Failed to copy texture to renderer : %s", SDL_GetError());
return EXIT_FAILURE;

View File

@ -1,7 +1,7 @@
#include "display.h"
#include <SDL2/SDL.h>
#include <stdio.h>
#include <SDL3/SDL.h>
#include <stdlib.h>
#include "errors.h"
SDL_Window *window = NULL;
@ -9,32 +9,32 @@ SDL_Renderer *renderer = NULL;
inline int display_init(void)
{
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS))
if(!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS))
{
printf("SDL failed to initialised : %s\n", SDL_GetError());
error_printf("Failed to initialise SDL3 : %s", SDL_GetError());
return EXIT_FAILURE;
}
window = SDL_CreateWindow("2D_Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, DISPLAY_WIDTH * RENDER_SCALE, DISPLAY_HEIGHT * RENDER_SCALE, SDL_WINDOW_SHOWN);
if(!window)
if(!SDL_SetAppMetadata("2D_Engine", "1.0", "2D_Engine"))
{
printf("Failed to create window : %s\n", SDL_GetError());
error_printf("Failed to set app metadata : %s", SDL_GetError());
return EXIT_FAILURE;
}
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if(!renderer)
if(!SDL_CreateWindowAndRenderer("2D_Engine", DISPLAY_WIDTH * RENDER_SCALE, DISPLAY_HEIGHT * RENDER_SCALE, SDL_WINDOW_RESIZABLE, &window, &renderer))
{
error_printf("Failed to create renderer : %s\n", SDL_GetError());
error_printf("Failed to create window or renderer : %s", SDL_GetError());
return EXIT_FAILURE;
}
if(SDL_RenderSetScale(renderer, RENDER_SCALE, RENDER_SCALE))
if(!SDL_SetRenderScale(renderer, RENDER_SCALE, RENDER_SCALE))
{
error_printf("Failed to change renderer scale : %s\n", SDL_GetError());
error_printf("Failed to set renderer logical presentation : %s", SDL_GetError());
return EXIT_FAILURE;
}
SDL_SetDefaultTextureScaleMode(renderer, SDL_SCALEMODE_PIXELART);
debug_printf("Initialized display.");
return EXIT_SUCCESS;
}
@ -50,15 +50,15 @@ inline void display_exit(void)
inline int display_clear(void)
{
if(SDL_SetRenderDrawColor(renderer, C_WHITE))
if(!SDL_SetRenderDrawColor(renderer, C_WHITE))
{
error_printf("Failed to change renderer draw color : %s\n", SDL_GetError());
error_printf("Failed to change renderer draw color : %s", SDL_GetError());
return EXIT_FAILURE;
}
if(SDL_RenderClear(renderer))
if(!SDL_RenderClear(renderer))
{
error_printf("Failed to clear renderer : %s\n", SDL_GetError());
error_printf("Failed to clear renderer : %s", SDL_GetError());
return EXIT_FAILURE;
}

View File

@ -1,6 +1,6 @@
#include "events.h"
#include <SDL2/SDL_events.h>
#include <SDL3/SDL_events.h>
inline int pollevent(event_t *event)
{
@ -8,7 +8,7 @@ inline int pollevent(event_t *event)
int ret = SDL_PollEvent(&sdl_event);
event->type = sdl_event.type;
event->key = sdl_event.key.keysym.scancode;
event->key = sdl_event.key.scancode;
return ret;
}

View File

@ -1,7 +1,7 @@
#ifndef ASSET_MANAGER_H
#define ASSET_MANAGER_H
#include <SDL2/SDL_render.h>
#include <SDL3/SDL_render.h>
#include <stdbool.h>
#include <stdio.h>
#include "linked_list.h"

View File

@ -1,7 +1,7 @@
#ifndef DISPLAY_H
#define DISPLAY_H
#include <SDL2/SDL_render.h>
#include <SDL3/SDL_render.h>
#define C_BLACK 0, 0, 0, 255
#define C_WHITE 255, 255, 255, 255

View File

@ -1,13 +1,13 @@
#ifndef KEYBOARD_H
#define KEYBOARD_H
#include <SDL2/SDL_events.h>
#include <SDL3/SDL_events.h>
#include "vector2d.h"
#include "keycodes.h"
#define EVENT_KEY_UP SDL_KEYUP
#define EVENT_KEY_DOWN SDL_KEYDOWN
#define EVENT_QUIT SDL_QUIT
#define EVENT_KEY_UP SDL_EVENT_KEY_UP
#define EVENT_KEY_DOWN SDL_EVENT_KEY_DOWN
#define EVENT_QUIT SDL_EVENT_QUIT
typedef struct event_t {
uint32_t type;

View File

@ -1,9 +1,9 @@
#ifndef KEYCODES_H
#define KEYCODES_H
#include <SDL2/SDL_events.h>
#include <SDL3/SDL_events.h>
#define MAX_KEYCODES SDL_NUM_SCANCODES
#define MAX_KEYCODES SDL_SCANCODE_COUNT
#define KEY_UP SDL_SCANCODE_UP
#define KEY_DOWN SDL_SCANCODE_DOWN

View File

@ -1,8 +1,9 @@
#ifndef VECTOR2D_H
#define VECTOR2D_H
#include <SDL3/SDL_rect.h>
#include <math.h>
#include <stdbool.h>
#include <SDL2/SDL_rect.h>
/**
* @brief Point struct. (int)

View File

@ -1,6 +1,7 @@
#include "game.h"
#include <SDL2/SDL.h>
#include <SDL3/SDL.h>
#include <stdlib.h>
game_t game;