From be691582ee12613278af24cb5a824eeb357f6324 Mon Sep 17 00:00:00 2001 From: Benji Dial Date: Mon, 29 Jul 2024 11:27:22 -0400 Subject: some work on compositor --- applications/goldman/source/renderer.hpp | 61 ++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 applications/goldman/source/renderer.hpp (limited to 'applications/goldman/source/renderer.hpp') diff --git a/applications/goldman/source/renderer.hpp b/applications/goldman/source/renderer.hpp new file mode 100644 index 0000000..14a5964 --- /dev/null +++ b/applications/goldman/source/renderer.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include +#include "window.hpp" +#include +#include + +class renderer { + + daguerre::image framebuffer; + daguerre::image double_buffer; + + daguerre::image background; + daguerre::image cursor; + daguerre::hilbert_color cursor_background; + + int cursor_x; + int cursor_y; + + //bottom to top + std::list windows; + + std::mutex mut; + + euler::syscall::stream_handle + dispatcher_handle_1, dispatcher_handle_2; + + void do_render(); + +public: + renderer( + daguerre::image &&framebuffer, + daguerre::image &&background, + daguerre::hilbert_color background_color, + daguerre::image &&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); + +}; -- cgit v1.2.3