Refactor Renderer class to remove inheritance from ExperimentFlags; streamline bitmap rendering and updating methods
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user