Refactor TexturePool class for improved readability and maintainability; reorganize method definitions and formatting for consistency.

This commit is contained in:
scawful
2025-04-29 08:20:59 -04:00
parent 718a14ca62
commit 0b9002e455

View File

@@ -2,64 +2,68 @@
#define YAZE_APP_GFX_TEXTURE_POOL_H #define YAZE_APP_GFX_TEXTURE_POOL_H
#include <SDL.h> #include <SDL.h>
#include <memory>
#include <string>
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include <string>
#include "app/core/platform/sdl_deleter.h"
namespace yaze { namespace yaze {
namespace gfx { namespace gfx {
class TexturePool { class TexturePool {
public: public:
static TexturePool& GetInstance() { static TexturePool& GetInstance() {
static TexturePool instance; static TexturePool instance;
return instance; return instance;
}
SDL_Texture* GetTexture(SDL_Renderer* renderer, int width, int height,
Uint32 format) {
std::string key = GenerateKey(width, height, format);
// Check if we have a suitable texture in the pool
auto it = available_textures_.find(key);
if (it != available_textures_.end() && !it->second.empty()) {
SDL_Texture* texture = it->second.back();
it->second.pop_back();
return texture;
} }
SDL_Texture* GetTexture(SDL_Renderer* renderer, int width, int height, Uint32 format) { // Create a new texture
std::string key = GenerateKey(width, height, format); return SDL_CreateTexture(renderer, format, SDL_TEXTUREACCESS_STREAMING,
width, height);
}
// Check if we have a suitable texture in the pool void ReturnTexture(SDL_Texture* texture, int width, int height,
auto it = available_textures_.find(key); Uint32 format) {
if (it != available_textures_.end() && !it->second.empty()) { if (!texture) return;
SDL_Texture* texture = it->second.back();
it->second.pop_back();
return texture;
}
// Create a new texture std::string key = GenerateKey(width, height, format);
return SDL_CreateTexture(renderer, format, SDL_TEXTUREACCESS_STREAMING, width, height); available_textures_[key].push_back(texture);
}
void Clear() {
for (auto& pair : available_textures_) {
for (SDL_Texture* texture : pair.second) {
SDL_DestroyTexture(texture);
}
} }
available_textures_.clear();
}
void ReturnTexture(SDL_Texture* texture, int width, int height, Uint32 format) { private:
if (!texture) return; TexturePool() = default;
std::string key = GenerateKey(width, height, format); std::string GenerateKey(int width, int height, Uint32 format) {
available_textures_[key].push_back(texture); return std::to_string(width) + "x" + std::to_string(height) + "_" +
} std::to_string(format);
}
void Clear() { std::unordered_map<std::string, std::vector<SDL_Texture*>>
for (auto& pair : available_textures_) { available_textures_;
for (SDL_Texture* texture : pair.second) {
SDL_DestroyTexture(texture);
}
}
available_textures_.clear();
}
private:
TexturePool() = default;
std::string GenerateKey(int width, int height, Uint32 format) {
return std::to_string(width) + "x" + std::to_string(height) + "_" + std::to_string(format);
}
std::unordered_map<std::string, std::vector<SDL_Texture*>> available_textures_;
}; };
} // namespace gfx } // namespace gfx
} // namespace yaze } // namespace yaze
#endif // YAZE_APP_GFX_TEXTURE_POOL_H #endif // YAZE_APP_GFX_TEXTURE_POOL_H