summaryrefslogtreecommitdiff
path: root/sys/src/renderer.rs
blob: 05d111b12fcac6f37a3c8260c61e02aa3e059730 (plain)
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) }
	}
}