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>(
33 SDL_CreateRenderer(window, -1, 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 bitmap.SetPalette(palette);
64 RenderBitmap(&bitmap);
65 }
66
67 private:
68 Renderer() = default;
69
70 std::unique_ptr<SDL_Renderer, SDL_Deleter> renderer_;
71
72 Renderer(const Renderer &) = delete;
73 Renderer &operator=(const Renderer &) = delete;
74};
75
76} // namespace core
77} // namespace yaze
78
79#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:70
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:66
void Create(int width, int height, int depth, std::span< uint8_t > data)
Create a bitmap with the given dimensions and data.
Definition bitmap.cc:257
void UpdateTexture(SDL_Renderer *renderer)
Updates the underlying SDL_Texture when it already exists.
Definition bitmap.cc:308
void SetPalette(const SnesPalette &palette)
Set the palette for the bitmap.
Definition bitmap.cc:403
void CreateTexture(SDL_Renderer *renderer)
Creates the underlying SDL_Texture to be displayed.
Definition bitmap.cc:323
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Main namespace for the application.
Definition controller.cc:18