diff --git a/src/display.c b/src/display.c index 513d5f9..11f66d5 100644 --- a/src/display.c +++ b/src/display.c @@ -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; diff --git a/src/headers/display.h b/src/headers/display.h index 2fa5944..f1ed137 100644 --- a/src/headers/display.h +++ b/src/headers/display.h @@ -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); diff --git a/src/headers/game.h b/src/headers/game.h index 077f099..ff8d6d7 100644 --- a/src/headers/game.h +++ b/src/headers/game.h @@ -2,6 +2,7 @@ #define GAME_H #include +#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; diff --git a/src/texture.c b/src/texture.c index 1e3dd79..b633830 100644 --- a/src/texture.c +++ b/src/texture.c @@ -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());