From f8a80039c74332e2101a177ef3fde31ef2077224 Mon Sep 17 00:00:00 2001 From: Micha White Date: Thu, 15 Aug 2024 20:14:15 -0400 Subject: Lots a changes --- sys/src/renderer.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 sys/src/renderer.rs (limited to 'sys/src/renderer.rs') diff --git a/sys/src/renderer.rs b/sys/src/renderer.rs new file mode 100644 index 0000000..05d111b --- /dev/null +++ b/sys/src/renderer.rs @@ -0,0 +1,49 @@ +use crate::{RendererConfig, Vertex, Window}; + +pub struct Renderer { + ptr: *mut (), +} + +impl Drop for Renderer { + fn drop(&mut self) { + unsafe { crate::destroy_renderer(self.ptr) } + } +} + +impl Renderer { + pub fn new(window: &Window, config: RendererConfig) -> Self { + let ptr = unsafe { crate::new_renderer(config, window.ptr) }; + Self { ptr } + } + + pub fn resize(&mut self, width: u32, height: u32) { + unsafe { crate::resize_renderer(self.ptr, width, height) } + } + + pub fn set_vsync(&mut self, vsync: bool) { + unsafe { crate::set_vsync(self.ptr, vsync) } + } + + pub fn create_vertex_buffer(&mut self, vertices: &[Vertex]) { + assert!(vertices.len() < (u32::MAX as usize), "Too many triangles!"); + let ptr = vertices.as_ptr(); + let len = vertices.len(); + unsafe { crate::create_vertex_buffer(self.ptr, len as u32, ptr) } + } + + pub fn set_camera( + &mut self, + x: f32, + y: f32, + zoom: f32, + rotation: f32, + width: f32, + height: f32, + ) { + unsafe { crate::set_camera(self.ptr, x, y, zoom, rotation, width, height) } + } + + pub fn render_frame(&mut self) { + unsafe { crate::render_frame(self.ptr) } + } +} -- cgit v1.2.3