From 24a86ba6e3624ec5840ebed0b9c23a152fe710c3 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Fri, 30 Dec 2022 00:44:49 +0000 Subject: [PATCH] Added API functions for modulating the colour and alpha of a texture --- include/GameEngine.h | 2 ++ include/Renderer.h | 3 +++ src/GameEngine.c | 28 ++++++++++++++++++++++++++++ src/Renderer.c | 8 ++++++++ 4 files changed, 41 insertions(+) diff --git a/include/GameEngine.h b/include/GameEngine.h index 2f6c53e..88ca6aa 100644 --- a/include/GameEngine.h +++ b/include/GameEngine.h @@ -74,6 +74,8 @@ void clip_render_rects_to_drawing_area(RenderRect *src, RenderRect *dest); RenderRect get_texture_asset_rect(AssetID id); void render_texture_asset(AssetID id, RenderRect *src, RenderRect *dest); +void modulate_texture_color(AssetID id, SDL_Color color); +void modulate_texture_alpha(AssetID id, u8 alpha); TextSize get_text_size_from_font_asset(AssetID id, const char *text); void render_text_with_font_asset(AssetID id, const char *text, f32 x, f32 y, SDL_Color color); diff --git a/include/Renderer.h b/include/Renderer.h index 45125c4..398c47c 100644 --- a/include/Renderer.h +++ b/include/Renderer.h @@ -7,6 +7,7 @@ #include "SDL_surface.h" #include "SDL_video.h" #include "aliases.h" +#include #include #ifdef __cplusplus @@ -43,6 +44,8 @@ Renderer *create_renderer(SDL_Window *window); void get_render_output_size(Renderer *renderer, i32 *w, i32 *h); void set_render_draw_color(const Renderer *renderer, SDL_Color color); +void set_texture_color_modulation(SDL_Texture *texture, SDL_Color color); +void set_texture_alpha_modulation(SDL_Texture *texture, u8 alpha); 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); diff --git a/src/GameEngine.c b/src/GameEngine.c index 178a8da..c144db6 100644 --- a/src/GameEngine.c +++ b/src/GameEngine.c @@ -326,6 +326,34 @@ void render_texture_asset(AssetID id, RenderRect *src, RenderRect *dest) { render_texture(GameEngine.window.renderer, texture, src, dest); } +void modulate_texture_color(AssetID id, SDL_Color color) { + if (id < 0) { + return; + } + + SDL_Texture *texture = get_texture(GameEngine.asset_manager, id); + + if (!texture) { + return; + } + + set_texture_color_modulation(texture, color); +} + +void modulate_texture_alpha(AssetID id, u8 alpha) { + if (id < 0) { + return; + } + + SDL_Texture *texture = get_texture(GameEngine.asset_manager, id); + + if (!texture) { + return; + } + + set_texture_alpha_modulation(texture, alpha); +} + TextSize get_text_size_from_font_asset(AssetID id, const char *text) { TextSize output = {}; diff --git a/src/Renderer.c b/src/Renderer.c index d81e4ec..c7d3ac4 100644 --- a/src/Renderer.c +++ b/src/Renderer.c @@ -47,6 +47,14 @@ void set_render_draw_color(const Renderer *renderer, SDL_Color color) { color.a); } +void set_texture_color_modulation(SDL_Texture *texture, SDL_Color color) { + SDL_SetTextureColorMod(texture, color.r, color.g, color.b); +} + +void set_texture_alpha_modulation(SDL_Texture *texture, u8 alpha) { + SDL_SetTextureAlphaMod(texture, alpha); +} + void render_clear(const Renderer *renderer, SDL_Color color) { if (!renderer || !(renderer->SDL_base_renderer)) { return;