Created display struct to encapsulate windo and renderer structs.

This commit is contained in:
Ulysse Cura 2026-08-21 23:40:53 +02:00
parent 45a7323213
commit 1d2a6da977
4 changed files with 23 additions and 22 deletions

View File

@ -7,9 +7,6 @@
#include "texture.h"
#include "errors.h"
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
inline int display_init(void)
{
if(!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS))
@ -24,8 +21,8 @@ inline int display_init(void)
return EXIT_FAILURE;
}
window = SDL_CreateWindow("2D_Engine", DISPLAY_WIDTH, DISPLAY_HEIGHT, 0);
if(!window)
game.display.window = SDL_CreateWindow("2D_Engine", DISPLAY_WIDTH, DISPLAY_HEIGHT, 0);
if(!game.display.window)
{
error_printf("Failed to create window : %s", SDL_GetError());
return EXIT_FAILURE;
@ -38,26 +35,26 @@ inline int display_init(void)
if(DRIVERS) warning_printf("This build of 2D_Engine_C only support the following drivers : %s", DRIVERS);
renderer = SDL_CreateRenderer(window, DRIVERS);
if(!renderer)
game.display.renderer = SDL_CreateRenderer(game.display.window, DRIVERS);
if(!game.display.renderer)
{
error_printf("Failed to create renderer : %s", SDL_GetError());
return EXIT_FAILURE;
}
if(!SDL_SetRenderVSync(renderer, SDL_RENDERER_VSYNC_ADAPTIVE))
if(!SDL_SetRenderVSync(game.display.renderer, SDL_RENDERER_VSYNC_ADAPTIVE))
{
error_printf("Failed to activate adaptative vsync : %s", SDL_GetError());
return EXIT_FAILURE;
}
if(!SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND))
if(!SDL_SetRenderDrawBlendMode(game.display.renderer, SDL_BLENDMODE_BLEND))
{
error_printf("Failed to set renderer draw blend mode : %s", SDL_GetError());
return EXIT_FAILURE;
}
if(!SDL_SetDefaultTextureScaleMode(renderer, SDL_SCALEMODE_NEAREST))
if(!SDL_SetDefaultTextureScaleMode(game.display.renderer, SDL_SCALEMODE_NEAREST))
{
error_printf("Failed to set default texture scale mode : %s", SDL_GetError());
return EXIT_FAILURE;
@ -69,8 +66,8 @@ inline int display_init(void)
inline void display_exit(void)
{
if(renderer) SDL_DestroyRenderer(renderer);
if(window) SDL_DestroyWindow(window);
if(game.display.renderer) SDL_DestroyRenderer(game.display.renderer);
if(game.display.window) SDL_DestroyWindow(game.display.window);
SDL_Quit();
debug_printf("Exited display.");
@ -78,13 +75,13 @@ inline void display_exit(void)
inline int display_clear(void)
{
if(!SDL_SetRenderDrawColor(renderer, C_WHITE, 255))
if(!SDL_SetRenderDrawColor(game.display.renderer, C_WHITE, 255))
{
error_printf("Failed to change renderer draw color : %s", SDL_GetError());
return EXIT_FAILURE;
}
if(!SDL_RenderClear(renderer))
if(!SDL_RenderClear(game.display.renderer))
{
error_printf("Failed to clear renderer : %s", SDL_GetError());
return EXIT_FAILURE;
@ -95,7 +92,7 @@ inline int display_clear(void)
inline int display_update(void)
{
if(!SDL_RenderPresent(renderer))
if(!SDL_RenderPresent(game.display.renderer))
{
error_printf("Failed to present renderer : %s", SDL_GetError());
return EXIT_FAILURE;
@ -121,7 +118,7 @@ inline int display_update(void)
error_printf("Sprintf failed : %d", errno);
return EXIT_FAILURE;
}
if(!SDL_SetWindowTitle(window, title))
if(!SDL_SetWindowTitle(game.display.window, title))
{
error_printf("Failed to set window title : %s", SDL_GetError());
return EXIT_FAILURE;
@ -156,7 +153,7 @@ int display_draw_texture(texture_t *texture, const rect_t *src_rect, const rect_
.h = dst_rect->h * (DISPLAY_HEIGHT / game.camera.view_rect.h)
};
if(!SDL_RenderTextureRotated(renderer, texture, src_rect ? &src_frect : NULL, dst_rect ? &dst_frect : NULL, 0, NULL, flip))
if(!SDL_RenderTextureRotated(game.display.renderer, texture, src_rect ? &src_frect : NULL, dst_rect ? &dst_frect : NULL, 0, NULL, flip))
{
error_printf("Failed to copy texture to renderer : %s", SDL_GetError());
return EXIT_FAILURE;
@ -167,7 +164,7 @@ int display_draw_texture(texture_t *texture, const rect_t *src_rect, const rect_
int display_draw_frect(const frect_t *frect, unsigned int r, unsigned int g, unsigned int b, unsigned int a)
{
if(!SDL_SetRenderDrawColor(renderer, r, g, b, a))
if(!SDL_SetRenderDrawColor(game.display.renderer, r, g, b, a))
{
error_printf("Failed to change renderer draw color : %s", SDL_GetError());
return EXIT_FAILURE;
@ -180,7 +177,7 @@ int display_draw_frect(const frect_t *frect, unsigned int r, unsigned int g, uns
.h = frect->h * (DISPLAY_HEIGHT / game.camera.view_rect.h)
};
if(!SDL_RenderRect(renderer, &display_frect))
if(!SDL_RenderRect(game.display.renderer, &display_frect))
{
error_printf("Failed to draw rectangle to renderer : %s", SDL_GetError());
return EXIT_FAILURE;

View File

@ -18,8 +18,10 @@
//#define DRIVERS NULL
#define DRIVERS "vulkan,gpu,software"
extern SDL_Window *window;
extern SDL_Renderer *renderer;
typedef struct display_t {
SDL_Window *window;
SDL_Renderer *renderer;
} display_t;
int display_init(void);
void display_exit(void);

View File

@ -2,6 +2,7 @@
#define GAME_H
#include <stdbool.h>
#include "display.h"
#include "asset_manager.h"
#include "camera.h"
#include "event_bus.h"
@ -20,6 +21,7 @@
* @param delta_time_ms Frame time
*/
typedef struct game_t {
display_t display;
camera_t camera;
asset_manager_t asset_manager;
event_bus_t event_bus;

View File

@ -49,7 +49,7 @@ texture_t *load_texture(void)
return NULL;
}
texture_t *texture = SDL_CreateTextureFromSurface(renderer, tmp_surface);
texture_t *texture = SDL_CreateTextureFromSurface(game.display.renderer, tmp_surface);
if(!texture)
{
error_printf("Failed to create texture from temporary surface : %s", SDL_GetError());