#ifndef RENDERER_H #define RENDERER_H #include "SDL.h" #include "SDL_pixels.h" #include "SDL_render.h" #include "SDL_surface.h" #include "SDL_video.h" #include "aliases.h" #include #ifdef __cplusplus extern "C" { #endif // !__cplusplus typedef struct renderer Renderer; typedef struct { i32 width; i32 height; } TextSize; typedef struct { f32 x; f32 y; f32 width; f32 height; } RenderRect; /** * Attempts to allocate a Renderer object on the heap. * * Returns the pointer to the object when it succeeds, or NULL if it fails. */ Renderer *create_renderer(SDL_Window *window); /** * Returns the valid drawable area that the renderer can use. * * Useful when rendering on screens that support high DPI since the drawable * area is usually bigger than the user-defined size. */ void get_render_output_size(Renderer *renderer, i32 *w, i32 *h); void set_render_draw_color(const Renderer *renderer, SDL_Color color); void render_clear(const Renderer *renderer, SDL_Color color); void draw_rect(const Renderer *renderer, SDL_Color color, f32 x, f32 y, f32 w, f32 h); void fill_rect(const Renderer *renderer, SDL_Color color, f32 x, f32 y, f32 w, f32 h); void render_surface(const Renderer *renderer, SDL_Surface *surface, const RenderRect *dest); void render_texture(const Renderer *renderer, SDL_Texture *texture, const RenderRect *src, const RenderRect *dest); void swap_buffers(const Renderer *renderer); /** * Attempts to load an SDL_Texture from a file path. * * Returns a pointer to the object if it succeeds or NULL when it fails. */ SDL_Texture *load_texture(const Renderer *renderer, const char *path); /** * Frees the memory allocated to the Renderer object and performs the * necessary cleanup. */ void destroy_renderer(Renderer **renderer); #ifdef __cplusplus } #endif // !__cplusplus #endif // !RENDERER_H