yaze 0.2.2
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 "absl/strings/str_format.h"
11#include "app/gfx/bitmap.h"
12
13namespace yaze {
14namespace core {
15
24class Renderer {
25 public:
27 static Renderer instance;
28 return instance;
29 }
30
31 absl::Status CreateRenderer(SDL_Window *window) {
32 renderer_ = std::unique_ptr<SDL_Renderer, SDL_Deleter>(SDL_CreateRenderer(
33 window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED));
34 if (renderer_ == nullptr) {
35 return absl::InternalError(
36 absl::StrFormat("SDL_CreateRenderer: %s\n", SDL_GetError()));
37 }
38 SDL_SetRenderDrawBlendMode(renderer_.get(), SDL_BLENDMODE_BLEND);
39 SDL_SetRenderDrawColor(renderer_.get(), 0x00, 0x00, 0x00, 0x00);
40 return absl::OkStatus();
41 }
42
43 auto renderer() -> SDL_Renderer * { return renderer_.get(); }
44
48 void RenderBitmap(gfx::Bitmap *bitmap) {
49 bitmap->CreateTexture(renderer_.get());
50 }
51
55 void UpdateBitmap(gfx::Bitmap *bitmap) {
56 bitmap->UpdateTexture(renderer_.get());
57 }
58
59 void CreateAndRenderBitmap(int width, int height, int depth,
60 const std::vector<uint8_t> &data,
61 gfx::Bitmap &bitmap, gfx::SnesPalette &palette) {
62 bitmap.Create(width, height, depth, data);
63 if (!bitmap.SetPalette(palette).ok()) {
64 throw std::runtime_error("Failed to set palette");
65 }
66 RenderBitmap(&bitmap);
67 }
68
69 private:
70 Renderer() = default;
71
72 std::unique_ptr<SDL_Renderer, SDL_Deleter> renderer_;
73
74 Renderer(const Renderer &) = delete;
75 Renderer &operator=(const Renderer &) = delete;
76};
77
78} // namespace core
79} // namespace yaze
80
81#endif
void CreateAndRenderBitmap(int width, int height, int depth, const std::vector< uint8_t > &data, gfx::Bitmap &bitmap, gfx::SnesPalette &palette)
Definition renderer.h:59
Renderer & operator=(const Renderer &)=delete
std::unique_ptr< SDL_Renderer, SDL_Deleter > renderer_
Definition renderer.h:72
void UpdateBitmap(gfx::Bitmap *bitmap)
Used to update a bitmap on the screen.
Definition renderer.h:55
static Renderer & GetInstance()
Definition renderer.h:26
auto renderer() -> SDL_Renderer *
Definition renderer.h:43
Renderer(const Renderer &)=delete
absl::Status CreateRenderer(SDL_Window *window)
Definition renderer.h:31
void RenderBitmap(gfx::Bitmap *bitmap)
Used to render a bitmap to the screen.
Definition renderer.h:48
Represents a bitmap image.
Definition bitmap.h:67
void UpdateTexture(SDL_Renderer *renderer)
Updates the underlying SDL_Texture when it already exists.
Definition bitmap.cc:314
absl::Status SetPalette(const SnesPalette &palette)
Copy color data from the SnesPalette into the SDL_Palette.
Definition bitmap.cc:329
void CreateTexture(SDL_Renderer *renderer)
Creates the underlying SDL_Texture to be displayed.
Definition bitmap.cc:281
void Create(int width, int height, int depth, int data_size)
Definition bitmap.h:97
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Main namespace for the application.
Definition controller.cc:18