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) } } }