mirror of
https://github.com/slint-ui/slint.git
synced 2025-08-04 18:58:36 +00:00
Add RGB565 rendering function to the C++ software renderer
This commit is contained in:
parent
1ecd36d51a
commit
cc36915241
2 changed files with 29 additions and 1 deletions
|
@ -295,6 +295,19 @@ public:
|
|||
cbindgen_private::slint_software_renderer_render_rgb8(
|
||||
inner, &window.window_handle().inner, buffer.data(), buffer.size(), pixel_stride);
|
||||
}
|
||||
|
||||
/// Render the window scene into an RGB 565 encoded pixel buffer
|
||||
///
|
||||
/// The buffer must be at least as large as the associated slint::Window
|
||||
///
|
||||
/// The stride is the amount of pixels between two lines in the buffer.
|
||||
/// It is must be at least as large as the width of the window.
|
||||
void render_rgb565(const Window &window, std::span<uint16_t> buffer,
|
||||
std::size_t pixel_stride) const
|
||||
{
|
||||
cbindgen_private::slint_software_renderer_render_rgb565(
|
||||
inner, &window.window_handle().inner, buffer.data(), buffer.size(), pixel_stride);
|
||||
}
|
||||
};
|
||||
|
||||
/// An opaque, low-level window handle that internalizes everything necessary to exchange messages
|
||||
|
|
|
@ -8,7 +8,7 @@ use i_slint_core::api::{PhysicalSize, Window};
|
|||
use i_slint_core::graphics::{IntSize, Rgb8Pixel};
|
||||
use i_slint_core::platform::{Platform, PlatformError};
|
||||
use i_slint_core::renderer::Renderer;
|
||||
use i_slint_core::software_renderer::{RepaintBufferType, SoftwareRenderer};
|
||||
use i_slint_core::software_renderer::{RepaintBufferType, Rgb565Pixel, SoftwareRenderer};
|
||||
use i_slint_core::window::ffi::WindowAdapterRcOpaque;
|
||||
use i_slint_core::window::{WindowAdapter, WindowAdapterInternal};
|
||||
|
||||
|
@ -295,6 +295,21 @@ pub unsafe extern "C" fn slint_software_renderer_render_rgb8(
|
|||
renderer.render(buffer, pixel_stride);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_render_rgb565(
|
||||
r: SoftwareRendererOpaque,
|
||||
window_adapter: *const WindowAdapterRcOpaque,
|
||||
buffer: *mut u16,
|
||||
buffer_len: usize,
|
||||
pixel_stride: usize,
|
||||
) {
|
||||
let buffer = core::slice::from_raw_parts_mut(buffer as *mut Rgb565Pixel, buffer_len);
|
||||
let renderer = &*(r as *const SoftwareRenderer);
|
||||
let window_adapter = &*(window_adapter as *const Rc<dyn WindowAdapter>);
|
||||
renderer.set_window(window_adapter.window());
|
||||
renderer.render(buffer, pixel_stride);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_handle(r: SoftwareRendererOpaque) -> RendererPtr {
|
||||
let r = (r as *const SoftwareRenderer) as *const dyn Renderer;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue