#include "Renderer.h" #include "SDL.h" #include "SDL_render.h" #include "engine_build_config.h" #include #include #ifdef DEBUG_ENGINE #include #endif /* DEBUG_ENGINE */ typedef struct renderer { SDL_Renderer *SDL_base_renderer; } Renderer; Renderer *create_renderer() { return (Renderer *)malloc(sizeof(Renderer)); } bool init_renderer(Renderer *renderer, SDL_Window *window) { if (!renderer || !window) { return false; } renderer->SDL_base_renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); // Technically speaking, I believe it should be possible to just return // the pointer. However, to make sure that everything is clear, I am // performing a test that returns true or false based on whether the // pointer was initialised or not. return renderer->SDL_base_renderer ? true : false; } void render_clear(const Renderer *renderer, SDL_Color color) { SDL_SetRenderDrawColor(renderer->SDL_base_renderer, color.r, color.r, color.b, color.a); SDL_RenderClear(renderer->SDL_base_renderer); } void swap_buffers(const Renderer *renderer) { SDL_RenderPresent(renderer->SDL_base_renderer); } void destroy_renderer(Renderer *renderer) { if (renderer) { if (renderer->SDL_base_renderer) { SDL_DestroyRenderer(renderer->SDL_base_renderer); renderer->SDL_base_renderer = NULL; } free(renderer); renderer = NULL; #ifdef DEBUG_ENGINE printf("Renderer destroyed successfully\n"); #endif /* DEBUG_ENGINE */ } }