From 994713d04c1416248176b556755a4df7ddccc965 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 18 Apr 2025 02:35:28 +0300 Subject: [PATCH] Kernel: Implement FramebufferDevice::get_pixel() --- kernel/include/kernel/Device/FramebufferDevice.h | 1 + kernel/kernel/Device/FramebufferDevice.cpp | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/kernel/include/kernel/Device/FramebufferDevice.h b/kernel/include/kernel/Device/FramebufferDevice.h index 0583450c..a9093406 100644 --- a/kernel/include/kernel/Device/FramebufferDevice.h +++ b/kernel/include/kernel/Device/FramebufferDevice.h @@ -15,6 +15,7 @@ namespace Kernel uint32_t width() const { return m_width; } uint32_t height() const { return m_height; } + uint32_t get_pixel(uint32_t x, uint32_t y) const; void set_pixel(uint32_t x, uint32_t y, uint32_t rgb); // positive rows -> empty pixels on bottom diff --git a/kernel/kernel/Device/FramebufferDevice.cpp b/kernel/kernel/Device/FramebufferDevice.cpp index 892235a7..aeed0359 100644 --- a/kernel/kernel/Device/FramebufferDevice.cpp +++ b/kernel/kernel/Device/FramebufferDevice.cpp @@ -125,6 +125,15 @@ namespace Kernel return bytes_to_copy; } + uint32_t FramebufferDevice::get_pixel(uint32_t x, uint32_t y) const + { + ASSERT(x < m_width && y < m_height); + const auto* video_buffer_u8 = reinterpret_cast(m_video_buffer->vaddr()); + return (video_buffer_u8[(y * m_width + x) * (BANAN_FB_BPP / 8) + 0] << 0) + | (video_buffer_u8[(y * m_width + x) * (BANAN_FB_BPP / 8) + 1] << 8) + | (video_buffer_u8[(y * m_width + x) * (BANAN_FB_BPP / 8) + 2] << 16); + } + void FramebufferDevice::set_pixel(uint32_t x, uint32_t y, uint32_t rgb) { if (x >= m_width || y >= m_height)