yaze 0.2.0
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
renderer.h
Go to the documentation of this file.
1#ifndef YAZE_APP_CORE_PLATFORM_RENDERER_H
2#define YAZE_APP_CORE_PLATFORM_RENDERER_H
3
4#include <SDL.h>
5
6#include <memory>
7
8#include "absl/status/status.h"
9#include "app/core/common.h"
11#include "app/gfx/bitmap.h"
12
13namespace yaze {
14namespace app {
15namespace core {
16
28class Renderer : public ExperimentFlags {
29 public:
31 static Renderer instance;
32 return instance;
33 }
34
35 absl::Status CreateRenderer(SDL_Window* window) {
36 renderer_ = std::unique_ptr<SDL_Renderer, SDL_Deleter>(
37 SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED));
38 if (renderer_ == nullptr) {
39 return absl::InternalError(
40 absl::StrFormat("SDL_CreateRenderer: %s\n", SDL_GetError()));
41 }
42 SDL_SetRenderDrawBlendMode(renderer_.get(), SDL_BLENDMODE_BLEND);
43 SDL_SetRenderDrawColor(renderer_.get(), 0x00, 0x00, 0x00, 0x00);
44 return absl::OkStatus();
45 }
46
47 auto renderer() -> SDL_Renderer* { return renderer_.get(); }
48
52 void RenderBitmap(gfx::Bitmap* bitmap) {
53 if (flags()->kLoadTexturesAsStreaming) {
54 bitmap->CreateTexture(renderer_.get());
55 } else {
56 // bitmap->CreateTexture(renderer_);
57 }
58 }
59
63 void UpdateBitmap(gfx::Bitmap* bitmap, bool use_sdl_update = false) {
64 if (flags()->kLoadTexturesAsStreaming) {
65 bitmap->UpdateTexture(renderer_.get(), use_sdl_update);
66 } else {
67 // bitmap->UpdateTexture(renderer_);
68 }
69 }
70
71 absl::Status CreateAndRenderBitmap(int width, int height, int depth,
72 const std::vector<uint8_t>& data,
73 gfx::Bitmap& bitmap,
74 gfx::SnesPalette& palette) {
75 bitmap.Create(width, height, depth, data);
76 RETURN_IF_ERROR(bitmap.ApplyPalette(palette));
77 RenderBitmap(&bitmap);
78 return absl::OkStatus();
79 }
80
81 private:
82 Renderer() = default;
83
84 std::unique_ptr<SDL_Renderer, SDL_Deleter> renderer_;
85
86 Renderer(const Renderer&) = delete;
87 Renderer& operator=(const Renderer&) = delete;
88};
89
90} // namespace core
91} // namespace app
92} // namespace yaze
93
94#endif
A class to manage experimental feature flags.
Definition common.h:30
The Renderer class represents the renderer for the Yaze application.
Definition renderer.h:28
absl::Status CreateRenderer(SDL_Window *window)
Definition renderer.h:35
auto renderer() -> SDL_Renderer *
Definition renderer.h:47
absl::Status CreateAndRenderBitmap(int width, int height, int depth, const std::vector< uint8_t > &data, gfx::Bitmap &bitmap, gfx::SnesPalette &palette)
Definition renderer.h:71
std::unique_ptr< SDL_Renderer, SDL_Deleter > renderer_
Definition renderer.h:84
Renderer(const Renderer &)=delete
static Renderer & GetInstance()
Definition renderer.h:30
void RenderBitmap(gfx::Bitmap *bitmap)
Used to render a bitmap to the screen.
Definition renderer.h:52
Renderer & operator=(const Renderer &)=delete
void UpdateBitmap(gfx::Bitmap *bitmap, bool use_sdl_update=false)
Used to update a bitmap on the screen.
Definition renderer.h:63
Represents a bitmap image.
Definition bitmap.h:70
void CreateTexture(std::shared_ptr< SDL_Renderer > renderer)
Creates the underlying SDL_Texture to be displayed.
Definition bitmap.cc:334
absl::Status ApplyPalette(const SnesPalette &palette)
Copy color data from the SnesPalette into the SDL_Palette.
Definition bitmap.cc:346
void Create(int width, int height, int depth, const std::vector< uint8_t > &data)
Creates a bitmap object with the provided graphical data.
Definition bitmap.cc:232
void UpdateTexture(std::shared_ptr< SDL_Renderer > renderer)
Updates the underlying SDL_Texture when it already exists.
Definition bitmap.cc:340
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
#define RETURN_IF_ERROR(expression)
Definition constants.h:69
Definition common.cc:21