blob: 14a5964f0ac99b772bec9a3746075a9863052a79 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#pragma once
#include <daguerre/image.hpp>
#include "window.hpp"
#include <mutex>
#include <list>
class renderer {
daguerre::image<daguerre::hilbert_color> framebuffer;
daguerre::image<daguerre::hilbert_color> double_buffer;
daguerre::image<daguerre::hilbert_color> background;
daguerre::image<daguerre::hilbert_color> cursor;
daguerre::hilbert_color cursor_background;
int cursor_x;
int cursor_y;
//bottom to top
std::list<const window *> windows;
std::mutex mut;
euler::syscall::stream_handle
dispatcher_handle_1, dispatcher_handle_2;
void do_render();
public:
renderer(
daguerre::image<daguerre::hilbert_color> &&framebuffer,
daguerre::image<daguerre::hilbert_color> &&background,
daguerre::hilbert_color background_color,
daguerre::image<daguerre::hilbert_color> &&cursor,
daguerre::hilbert_color cursor_background);
inline ~renderer() {
euler::syscall::close_stream(dispatcher_handle_1);
euler::syscall::close_stream(dispatcher_handle_2);
}
renderer(const renderer &) = delete;
renderer &operator =(const renderer &) = delete;
[[noreturn]] void render_thread_main();
inline void lock() { mut.lock(); }
inline void unlock() { mut.unlock(); }
inline void dispatch_render() {
uint8_t byte = 0;
euler::syscall::write_to_stream(dispatcher_handle_1, 1, &byte);
}
void bump_cursor(int x_offset, int y_offset);
void add_window(const window *w);
void remove_window(const window *w);
};
|