diff options
author | Benji Dial <benji@benjidial.net> | 2024-07-29 11:27:22 -0400 |
---|---|---|
committer | Benji Dial <benji@benjidial.net> | 2024-07-29 11:27:22 -0400 |
commit | be691582ee12613278af24cb5a824eeb357f6324 (patch) | |
tree | 5982ca3aad5257f515c93f62735ff3d630aa3ab3 /applications/goldman/source/main.cpp | |
parent | 3636fd21e079c47bd8d62e773e178f68fe9c2052 (diff) | |
download | hilbert-os-be691582ee12613278af24cb5a824eeb357f6324.tar.gz |
some work on compositor
Diffstat (limited to 'applications/goldman/source/main.cpp')
-rw-r--r-- | applications/goldman/source/main.cpp | 84 |
1 files changed, 21 insertions, 63 deletions
diff --git a/applications/goldman/source/main.cpp b/applications/goldman/source/main.cpp index d74eaad..475129f 100644 --- a/applications/goldman/source/main.cpp +++ b/applications/goldman/source/main.cpp @@ -1,79 +1,37 @@ #include <daguerre/framebuffer.hpp> #include <daguerre/ppm.hpp> +#include "renderer.hpp" +#include "socket.hpp" +#include "input.hpp" +#include "main.hpp" -daguerre::hilbert_color trans_color; +//TODO: handle errors -void convert_pointer( - daguerre::hilbert_color &dest, const daguerre::hilbert_color &src) { - if (src != trans_color) - dest = src; -} +renderer *r; int main(int, char **) { - trans_color = euler::syscall::encode_color(0xff, 0x00, 0xff); - - daguerre::image<daguerre::hilbert_color> framebuffer = - daguerre::get_hilbert_framebuffer(); - - int fw = framebuffer.width; - int fh = framebuffer.height; - - daguerre::image<daguerre::hilbert_color> double_buffer(fw, fh); + euler::syscall::listener_handle listener; + euler::syscall::create_socket_listener("hilbert.compositor", listener); - std::optional<daguerre::image<daguerre::hilbert_color>> - background_original = daguerre::try_load_ppm("/assets/background.ppm"); - - daguerre::image<daguerre::hilbert_color> background; - - if (background_original.has_value()) - background = background_original->stretch(fw, fh); - else { - background = daguerre::image<daguerre::hilbert_color>(fw, fh); - background.fill(euler::syscall::encode_color(0, 0, 0)); - } + r = new renderer( + daguerre::get_hilbert_framebuffer(), + *daguerre::try_load_ppm("/assets/background.ppm"), + euler::syscall::encode_color(0x00, 0x00, 0x00), + *daguerre::try_load_ppm("/assets/pointer.ppm"), + euler::syscall::encode_color(0xff, 0x00, 0xff)); - std::optional<daguerre::image<daguerre::hilbert_color>> - pointer_original = daguerre::try_load_ppm("/assets/pointer.ppm"); + euler::syscall::start_thread([]() { r->render_thread_main(); }); + euler::syscall::start_thread(input_thread_main); - if (!pointer_original.has_value()) - //TODO - while (1) - ; + r->dispatch_render(); - daguerre::image<daguerre::hilbert_color> - pointer = std::move(*pointer_original); - - int mouse_x = fw / 2; - int mouse_y = fh / 2; + euler::syscall::set_thread_name("socket listener thread"); while (true) { - - double_buffer.copy_from(background, 0, 0); - double_buffer.convert_from(pointer, mouse_x, mouse_y, 0, 0, - std::min(pointer. width, double_buffer. width - mouse_x), - std::min(pointer.height, double_buffer.height - mouse_y), - &convert_pointer); - - framebuffer.copy_from(double_buffer, 0, 0); - - auto result = euler::syscall::get_input_packet(); - if (std::holds_alternative<euler::syscall::mouse_packet>(result)) { - const auto &packet = std::get<euler::syscall::mouse_packet>(result); - mouse_x += packet.x_changed; - mouse_y += packet.y_changed; - if (mouse_x < 0) - mouse_x = 0; - else if (mouse_x >= fw) - mouse_x = fw - 1; - if (mouse_y < 0) - mouse_y = 0; - else if (mouse_y >= fh) - mouse_y = fh - 1; - } - + euler::syscall::stream_handle socket; + euler::syscall::accept_socket_connection(listener, socket); + euler::syscall::start_thread(socket_thread_main, socket); } - return 0; - } |