Refactor Renderer class to remove inheritance from ExperimentFlags; streamline bitmap rendering and updating methods

This commit is contained in:
scawful
2024-11-13 08:53:24 -05:00
parent b1edd862fc
commit 8e8b3ed2f7

View File

@@ -6,7 +6,6 @@
#include <memory> #include <memory>
#include "absl/status/status.h" #include "absl/status/status.h"
#include "app/core/common.h"
#include "app/core/utils/sdl_deleter.h" #include "app/core/utils/sdl_deleter.h"
#include "app/gfx/bitmap.h" #include "app/gfx/bitmap.h"
@@ -21,20 +20,17 @@ namespace core {
* This class is a singleton that provides functionality for creating and * This class is a singleton that provides functionality for creating and
* rendering bitmaps to the screen. It also includes methods for updating * rendering bitmaps to the screen. It also includes methods for updating
* bitmaps on the screen. * bitmaps on the screen.
*
* The Renderer class uses the ExperimentFlags class to access the application's
* flags.
*/ */
class Renderer : public ExperimentFlags { class Renderer {
public: public:
static Renderer& GetInstance() { static Renderer &GetInstance() {
static Renderer instance; static Renderer instance;
return instance; return instance;
} }
absl::Status CreateRenderer(SDL_Window* window) { absl::Status CreateRenderer(SDL_Window *window) {
renderer_ = std::unique_ptr<SDL_Renderer, SDL_Deleter>( renderer_ = std::unique_ptr<SDL_Renderer, SDL_Deleter>(SDL_CreateRenderer(
SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED)); window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED));
if (renderer_ == nullptr) { if (renderer_ == nullptr) {
return absl::InternalError( return absl::InternalError(
absl::StrFormat("SDL_CreateRenderer: %s\n", SDL_GetError())); absl::StrFormat("SDL_CreateRenderer: %s\n", SDL_GetError()));
@@ -44,34 +40,26 @@ class Renderer : public ExperimentFlags {
return absl::OkStatus(); return absl::OkStatus();
} }
auto renderer() -> SDL_Renderer* { return renderer_.get(); } auto renderer() -> SDL_Renderer * { return renderer_.get(); }
/** /**
* @brief Used to render a bitmap to the screen. * @brief Used to render a bitmap to the screen.
*/ */
void RenderBitmap(gfx::Bitmap* bitmap) { void RenderBitmap(gfx::Bitmap *bitmap) {
if (flags()->kLoadTexturesAsStreaming) { bitmap->CreateTexture(renderer_.get());
bitmap->CreateTexture(renderer_.get());
} else {
// bitmap->CreateTexture(renderer_);
}
} }
/** /**
* @brief Used to update a bitmap on the screen. * @brief Used to update a bitmap on the screen.
*/ */
void UpdateBitmap(gfx::Bitmap* bitmap, bool use_sdl_update = false) { void UpdateBitmap(gfx::Bitmap *bitmap, bool use_sdl_update = false) {
if (flags()->kLoadTexturesAsStreaming) { bitmap->UpdateTexture(renderer_.get(), use_sdl_update);
bitmap->UpdateTexture(renderer_.get(), use_sdl_update);
} else {
// bitmap->UpdateTexture(renderer_);
}
} }
absl::Status CreateAndRenderBitmap(int width, int height, int depth, absl::Status CreateAndRenderBitmap(int width, int height, int depth,
const std::vector<uint8_t>& data, const std::vector<uint8_t> &data,
gfx::Bitmap& bitmap, gfx::Bitmap &bitmap,
gfx::SnesPalette& palette) { gfx::SnesPalette &palette) {
bitmap.Create(width, height, depth, data); bitmap.Create(width, height, depth, data);
RETURN_IF_ERROR(bitmap.ApplyPalette(palette)); RETURN_IF_ERROR(bitmap.ApplyPalette(palette));
RenderBitmap(&bitmap); RenderBitmap(&bitmap);
@@ -83,12 +71,12 @@ class Renderer : public ExperimentFlags {
std::unique_ptr<SDL_Renderer, SDL_Deleter> renderer_; std::unique_ptr<SDL_Renderer, SDL_Deleter> renderer_;
Renderer(const Renderer&) = delete; Renderer(const Renderer &) = delete;
Renderer& operator=(const Renderer&) = delete; Renderer &operator=(const Renderer &) = delete;
}; };
} // namespace core } // namespace core
} // namespace app } // namespace app
} // namespace yaze } // namespace yaze
#endif #endif