diff --git a/src/Makefile b/src/Makefile index 195b71e..de0e09c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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) diff --git a/src/asset_manager.c b/src/asset_manager.c index 166a920..79f6c4f 100644 --- a/src/asset_manager.c +++ b/src/asset_manager.c @@ -1,6 +1,6 @@ #include "asset_manager.h" -#include +#include #include #include #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; diff --git a/src/display.c b/src/display.c index 8565d95..15a2e07 100644 --- a/src/display.c +++ b/src/display.c @@ -1,7 +1,7 @@ #include "display.h" -#include -#include +#include +#include #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; } diff --git a/src/events.c b/src/events.c index 497d33a..c3f44d0 100644 --- a/src/events.c +++ b/src/events.c @@ -1,6 +1,6 @@ #include "events.h" -#include +#include 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; } diff --git a/src/headers/asset_manager.h b/src/headers/asset_manager.h index 4802a13..29fcd01 100644 --- a/src/headers/asset_manager.h +++ b/src/headers/asset_manager.h @@ -1,7 +1,7 @@ #ifndef ASSET_MANAGER_H #define ASSET_MANAGER_H -#include +#include #include #include #include "linked_list.h" diff --git a/src/headers/display.h b/src/headers/display.h index e30e561..e3b9353 100644 --- a/src/headers/display.h +++ b/src/headers/display.h @@ -1,7 +1,7 @@ #ifndef DISPLAY_H #define DISPLAY_H -#include +#include #define C_BLACK 0, 0, 0, 255 #define C_WHITE 255, 255, 255, 255 diff --git a/src/headers/events.h b/src/headers/events.h index 2f2c276..0e98a40 100644 --- a/src/headers/events.h +++ b/src/headers/events.h @@ -1,13 +1,13 @@ #ifndef KEYBOARD_H #define KEYBOARD_H -#include +#include #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; diff --git a/src/headers/keycodes.h b/src/headers/keycodes.h index b80fc92..96c53ff 100644 --- a/src/headers/keycodes.h +++ b/src/headers/keycodes.h @@ -1,9 +1,9 @@ #ifndef KEYCODES_H #define KEYCODES_H -#include +#include -#define MAX_KEYCODES SDL_NUM_SCANCODES +#define MAX_KEYCODES SDL_SCANCODE_COUNT #define KEY_UP SDL_SCANCODE_UP #define KEY_DOWN SDL_SCANCODE_DOWN diff --git a/src/headers/vector2d.h b/src/headers/vector2d.h index 67802a4..499f6eb 100644 --- a/src/headers/vector2d.h +++ b/src/headers/vector2d.h @@ -1,8 +1,9 @@ #ifndef VECTOR2D_H #define VECTOR2D_H +#include +#include #include -#include /** * @brief Point struct. (int) diff --git a/src/main.c b/src/main.c index 2742ea5..316bf6f 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ #include "game.h" -#include +#include +#include game_t game;