yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
window.h
Go to the documentation of this file.
1#ifndef YAZE_CORE_WINDOW_H_
2#define YAZE_CORE_WINDOW_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
16struct Window {
17 std::shared_ptr<SDL_Window> window_;
18 SDL_AudioDeviceID audio_device_;
19 std::shared_ptr<int16_t> audio_buffer_;
20 bool active_ = true;
21};
22
23absl::Status CreateWindow(Window &window, int flags);
24absl::Status HandleEvents(Window &window);
25absl::Status ShutdownWindow(Window &window);
26
35class Renderer {
36 public:
37 static Renderer &Get() {
38 static Renderer instance;
39 return instance;
40 }
41
42 absl::Status CreateRenderer(SDL_Window *window) {
43 renderer_ = std::unique_ptr<SDL_Renderer, SDL_Deleter>(
44 SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED));
45 if (renderer_ == nullptr) {
46 return absl::InternalError(
47 absl::StrFormat("SDL_CreateRenderer: %s\n", SDL_GetError()));
48 }
49 SDL_SetRenderDrawBlendMode(renderer_.get(), SDL_BLENDMODE_BLEND);
50 SDL_SetRenderDrawColor(renderer_.get(), 0x00, 0x00, 0x00, 0x00);
51 return absl::OkStatus();
52 }
53
54 auto renderer() -> SDL_Renderer * { return renderer_.get(); }
55
56 void RenderBitmap(gfx::Bitmap *bitmap) {
57 bitmap->CreateTexture(renderer_.get());
58 }
59
60 void UpdateBitmap(gfx::Bitmap *bitmap) {
61 bitmap->UpdateTexture(renderer_.get());
62 }
63
64 void CreateAndRenderBitmap(int width, int height, int depth,
65 const std::vector<uint8_t> &data,
66 gfx::Bitmap &bitmap, gfx::SnesPalette &palette) {
67 bitmap.Create(width, height, depth, data);
68 bitmap.SetPalette(palette);
69 RenderBitmap(&bitmap);
70 }
71
72 void Clear() {
73 SDL_SetRenderDrawColor(renderer_.get(), 0x00, 0x00, 0x00, 0x00);
74 SDL_RenderClear(renderer_.get());
75 }
76
77 void Present() { SDL_RenderPresent(renderer_.get()); }
78
79 private:
80 Renderer() = default;
81
82 std::unique_ptr<SDL_Renderer, SDL_Deleter> renderer_;
83
84 Renderer(const Renderer &) = delete;
85 Renderer &operator=(const Renderer &) = delete;
86};
87
88} // namespace core
89} // namespace yaze
90#endif // YAZE_CORE_WINDOW_H_
void CreateAndRenderBitmap(int width, int height, int depth, const std::vector< uint8_t > &data, gfx::Bitmap &bitmap, gfx::SnesPalette &palette)
Definition window.h:64
Renderer & operator=(const Renderer &)=delete
std::unique_ptr< SDL_Renderer, SDL_Deleter > renderer_
Definition window.h:82
void UpdateBitmap(gfx::Bitmap *bitmap)
Definition window.h:60
auto renderer() -> SDL_Renderer *
Definition window.h:54
static Renderer & Get()
Definition window.h:37
Renderer(const Renderer &)=delete
absl::Status CreateRenderer(SDL_Window *window)
Definition window.h:42
void RenderBitmap(gfx::Bitmap *bitmap)
Definition window.h:56
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).
absl::Status ShutdownWindow(Window &window)
Definition window.cc:74
absl::Status CreateWindow(Window &window, int flags)
Definition window.cc:15
absl::Status HandleEvents(Window &window)
Definition window.cc:86
Main namespace for the application.
Definition controller.cc:12
std::shared_ptr< SDL_Window > window_
Definition window.h:17
std::shared_ptr< int16_t > audio_buffer_
Definition window.h:19
SDL_AudioDeviceID audio_device_
Definition window.h:18