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:
26 static Renderer &Get() {
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
45 void RenderBitmap(gfx::Bitmap *bitmap) {
46 bitmap->CreateTexture(renderer_.get());
47 }
48
49 void UpdateBitmap(gfx::Bitmap *bitmap) {
50 bitmap->UpdateTexture(renderer_.get());
51 }
52
53 void CreateAndRenderBitmap(int width, int height, int depth,
54 const std::vector<uint8_t> &data,
55 gfx::Bitmap &bitmap, gfx::SnesPalette &palette) {
56 bitmap.Create(width, height, depth, data);
57 bitmap.SetPalette(palette);
58 RenderBitmap(&bitmap);
59 }
60
61 void Clear() {
62 SDL_SetRenderDrawColor(renderer_.get(), 0x00, 0x00, 0x00, 0x00);
63 SDL_RenderClear(renderer_.get());
64 }
65
66 void Present() { SDL_RenderPresent(renderer_.get()); }
67
68 private:
69 Renderer() = default;
70
71 std::unique_ptr<SDL_Renderer, SDL_Deleter> renderer_;
72
73 Renderer(const Renderer &) = delete;
74 Renderer &operator=(const Renderer &) = delete;
75};
76
77} // namespace core
78} // namespace yaze
79
80#endif
void CreateAndRenderBitmap(int width, int height, int depth, const std::vector< uint8_t > &data, gfx::Bitmap &bitmap, gfx::SnesPalette &palette)
Definition renderer.h:53
Renderer & operator=(const Renderer &)=delete
std::unique_ptr< SDL_Renderer, SDL_Deleter > renderer_
Definition renderer.h:71
void UpdateBitmap(gfx::Bitmap *bitmap)
Definition renderer.h:49
auto renderer() -> SDL_Renderer *
Definition renderer.h:43
static Renderer & Get()
Definition renderer.h:26
Renderer(const Renderer &)=delete
absl::Status CreateRenderer(SDL_Window *window)
Definition renderer.h:31
void RenderBitmap(gfx::Bitmap *bitmap)
Definition renderer.h:45
Represents a bitmap image.
Definition bitmap.h:59
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:218
void UpdateTexture(SDL_Renderer *renderer)
Updates the underlying SDL_Texture when it already exists.
Definition bitmap.cc:266
void SetPalette(const SnesPalette &palette)
Set the palette for the bitmap.
Definition bitmap.cc:307
void CreateTexture(SDL_Renderer *renderer)
Creates the underlying SDL_Texture to be displayed.
Definition bitmap.cc:275
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Main namespace for the application.
Definition controller.cc:18