From 605360bae5552023180cc6f3fb673711eab38426 Mon Sep 17 00:00:00 2001 From: Frank DeMarco Date: Sat, 11 Jul 2020 02:06:58 -0400 Subject: [PATCH] Sprite accepts alpha mod parameter; duplicate texture method --- src/Sprite.cpp | 1 + src/Sprite.hpp | 1 + src/extension.cpp | 10 ++++++++++ src/extension.hpp | 1 + 4 files changed, 13 insertions(+) diff --git a/src/Sprite.cpp b/src/Sprite.cpp index 7f86941..e4d1809 100644 --- a/src/Sprite.cpp +++ b/src/Sprite.cpp @@ -194,6 +194,7 @@ void Sprite::update() { SDL_Texture* texture = frames[frame_ii]; SDL_Renderer* renderer = get_root()->renderer; + SDL_SetTextureAlphaMod(texture, alpha_mod); SDL_SetRenderTarget(renderer, NULL); SDL_RenderCopyF(renderer, texture, NULL, box.get_rect()); } diff --git a/src/Sprite.hpp b/src/Sprite.hpp index 9aedb8a..e2f7dd4 100644 --- a/src/Sprite.hpp +++ b/src/Sprite.hpp @@ -25,6 +25,7 @@ struct Sprite : Node Animation blink_animation = Animation(&Sprite::toggle_hidden, this, 500); bool is_hidden = false; glm::vec2 step = {0, 0}; + Uint8 alpha_mod = 255; Sprite(Node*); Sprite(Node*, std::string); diff --git a/src/extension.cpp b/src/extension.cpp index 3d059eb..5c877e1 100644 --- a/src/extension.cpp +++ b/src/extension.cpp @@ -35,6 +35,16 @@ void sfw::fill_texture(SDL_Renderer* renderer, SDL_Texture* texture, SDL_Texture } } +SDL_Texture* sfw::duplicate_texture(SDL_Renderer* renderer, SDL_Texture* texture) +{ + Box box = get_texture_box(texture); + SDL_Texture* duplicate = SDL_CreateTexture( + renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, box.get_w(), box.get_h()); + SDL_SetRenderTarget(renderer, duplicate); + SDL_RenderCopyF(renderer, texture, NULL, NULL); + return duplicate; +} + std::vector sfw::glob(fs::path query) { fs::path basename = query.parent_path(); diff --git a/src/extension.hpp b/src/extension.hpp index 57fd43d..42cef6e 100644 --- a/src/extension.hpp +++ b/src/extension.hpp @@ -23,6 +23,7 @@ namespace sfw Box get_texture_box(SDL_Texture*); void fill_texture(SDL_Renderer*, SDL_Texture*, int, int, int, int = 0xff); void fill_texture(SDL_Renderer*, SDL_Texture*, SDL_Texture*); + SDL_Texture* duplicate_texture(SDL_Renderer*, SDL_Texture*); std::vector glob(fs::path); fs::path get_next_file_name( fs::path, int = 0, std::string = "", std::string = "");