From 509e5ce1e17417a70b9bcce8bc6e33c05106811d Mon Sep 17 00:00:00 2001 From: Mica White Date: Thu, 15 Aug 2024 20:23:26 -0400 Subject: Start profiling --- sys/alligator_backend.lib | Bin 0 -> 625152 bytes sys/build.rs | 16 ++-- sys/src/renderer.rs | 98 ++++++++++---------- sys/src/window.rs | 232 +++++++++++++++++++++++----------------------- 4 files changed, 173 insertions(+), 173 deletions(-) create mode 100644 sys/alligator_backend.lib (limited to 'sys') diff --git a/sys/alligator_backend.lib b/sys/alligator_backend.lib new file mode 100644 index 0000000..1b79670 Binary files /dev/null and b/sys/alligator_backend.lib differ diff --git a/sys/build.rs b/sys/build.rs index c33a20f..8efc265 100644 --- a/sys/build.rs +++ b/sys/build.rs @@ -1,8 +1,8 @@ -fn main() { - let out_dir = std::env::var("OUT_DIR").unwrap(); - eprintln!("{out_dir}"); - println!("cargo:rustc-link-lib=d3d11"); - println!("cargo:rustc-link-search=native=./"); - println!("cargo:rustc-link-lib-static=alligator_backend"); - println!("cargo:rerun-if-changed=alligator_backend.lib"); -} +fn main() { + let out_dir = std::env::var("OUT_DIR").unwrap(); + eprintln!("{out_dir}"); + println!("cargo:rustc-link-lib=d3d11"); + println!("cargo:rustc-link-search=native=./"); + println!("cargo:rustc-link-lib-static=alligator_backend"); + println!("cargo:rerun-if-changed=alligator_backend.lib"); +} diff --git a/sys/src/renderer.rs b/sys/src/renderer.rs index 05d111b..a4dab20 100644 --- a/sys/src/renderer.rs +++ b/sys/src/renderer.rs @@ -1,49 +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) } - } -} +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) } + } +} diff --git a/sys/src/window.rs b/sys/src/window.rs index 19de5e7..f9a8832 100644 --- a/sys/src/window.rs +++ b/sys/src/window.rs @@ -1,116 +1,116 @@ -use std::ffi::{c_void, CString}; -use std::ops::ControlFlow; - -use crate::{CWindowConfig, CWindowEvent}; - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct WindowConfig { - pub title: String, - pub default_width: u32, - pub default_height: u32, - pub default_x: u32, - pub default_y: u32, - pub visible: bool, - pub borderless_fullscreen: bool, -} - -pub struct Window { - pub(crate) ptr: *mut (), -} - -pub enum WindowEvent { - Other = 1, - CloseRequest, - ScaleFactorChange, - Resume, - RedrawRequest, -} - -impl Drop for Window { - fn drop(&mut self) { - unsafe { crate::destroy_window(self.ptr) } - } -} - -impl Window { - pub fn new(config: WindowConfig) -> Self { - let title = CString::new(config.title.as_bytes()).unwrap(); - let config = CWindowConfig { - default_width: config.default_width, - default_height: config.default_height, - default_x: config.default_x, - default_y: config.default_y, - visible: config.visible, - borderless_fullscreen: config.borderless_fullscreen, - title: title.as_ptr(), - }; - - let window = unsafe { crate::create_window(config) }; - - Self { ptr: window } - } - - pub fn set_visible(&mut self, visible: bool) { - unsafe { crate::set_visible(self.ptr, visible) } - } - - pub fn set_title(&mut self, title: &str) { - let string = CString::new(title.to_string().as_bytes()).unwrap(); - let bytes = string.as_ptr(); - unsafe { crate::set_title(self.ptr, bytes) } - } - - pub fn resize(&mut self, width: u32, height: u32) { - unsafe { crate::resize_window(self.ptr, width, height) } - } - - pub fn set_fullscreen(&mut self, fullscreen: bool) { - unsafe { crate::set_fullscreen(self.ptr, fullscreen) } - } - - fn translate_event(event: CWindowEvent) -> Option { - let event = match event { - CWindowEvent::AboutToWait => return None, - CWindowEvent::Other => WindowEvent::Other, - CWindowEvent::CloseRequest => WindowEvent::CloseRequest, - CWindowEvent::ScaleFactorChange => WindowEvent::ScaleFactorChange, - CWindowEvent::Resume => WindowEvent::Resume, - CWindowEvent::RedrawRequest => WindowEvent::RedrawRequest, - }; - Some(event) - } - - pub fn wait_for_event(&self) { - unsafe { crate::wait_for_event(self.ptr) } - } - - pub fn pop_event(&self) -> bool { - unsafe { crate::pop_event(self.ptr) } - } - - pub fn wait_for_resume(&mut self) { - unsafe { crate::wait_for_resume(self.ptr) } - } - - pub fn run(&mut self, mut handler: impl FnMut(&mut Window, Option)) -> ! { - let window_ptr = self.ptr; - - unsafe { - let closure = |c_event: CWindowEvent| { - handler(self, Self::translate_event(c_event)); - }; - let closure_data: Box> = Box::new(Box::new(closure)); - crate::set_event_handler(window_ptr, Box::into_raw(closure_data) as *mut _); - } - - loop { - if !self.pop_event() { - unsafe { crate::run_event_handler(window_ptr, CWindowEvent::AboutToWait) }; - } - } - } - - pub fn request_redraw(&mut self) { - unsafe { crate::request_redraw(self.ptr) } - } -} +use std::ffi::{c_void, CString}; +use std::ops::ControlFlow; + +use crate::{CWindowConfig, CWindowEvent}; + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct WindowConfig { + pub title: String, + pub default_width: u32, + pub default_height: u32, + pub default_x: u32, + pub default_y: u32, + pub visible: bool, + pub borderless_fullscreen: bool, +} + +pub struct Window { + pub(crate) ptr: *mut (), +} + +pub enum WindowEvent { + Other = 1, + CloseRequest, + ScaleFactorChange, + Resume, + RedrawRequest, +} + +impl Drop for Window { + fn drop(&mut self) { + unsafe { crate::destroy_window(self.ptr) } + } +} + +impl Window { + pub fn new(config: WindowConfig) -> Self { + let title = CString::new(config.title.as_bytes()).unwrap(); + let config = CWindowConfig { + default_width: config.default_width, + default_height: config.default_height, + default_x: config.default_x, + default_y: config.default_y, + visible: config.visible, + borderless_fullscreen: config.borderless_fullscreen, + title: title.as_ptr(), + }; + + let window = unsafe { crate::create_window(config) }; + + Self { ptr: window } + } + + pub fn set_visible(&mut self, visible: bool) { + unsafe { crate::set_visible(self.ptr, visible) } + } + + pub fn set_title(&mut self, title: &str) { + let string = CString::new(title.to_string().as_bytes()).unwrap(); + let bytes = string.as_ptr(); + unsafe { crate::set_title(self.ptr, bytes) } + } + + pub fn resize(&mut self, width: u32, height: u32) { + unsafe { crate::resize_window(self.ptr, width, height) } + } + + pub fn set_fullscreen(&mut self, fullscreen: bool) { + unsafe { crate::set_fullscreen(self.ptr, fullscreen) } + } + + fn translate_event(event: CWindowEvent) -> Option { + let event = match event { + CWindowEvent::AboutToWait => return None, + CWindowEvent::Other => WindowEvent::Other, + CWindowEvent::CloseRequest => WindowEvent::CloseRequest, + CWindowEvent::ScaleFactorChange => WindowEvent::ScaleFactorChange, + CWindowEvent::Resume => WindowEvent::Resume, + CWindowEvent::RedrawRequest => WindowEvent::RedrawRequest, + }; + Some(event) + } + + pub fn wait_for_event(&self) { + unsafe { crate::wait_for_event(self.ptr) } + } + + pub fn pop_event(&self) -> bool { + unsafe { crate::pop_event(self.ptr) } + } + + pub fn wait_for_resume(&mut self) { + unsafe { crate::wait_for_resume(self.ptr) } + } + + pub fn run(&mut self, mut handler: impl FnMut(&mut Window, Option)) -> ! { + let window_ptr = self.ptr; + + unsafe { + let closure = |c_event: CWindowEvent| { + handler(self, Self::translate_event(c_event)); + }; + let closure_data: Box> = Box::new(Box::new(closure)); + crate::set_event_handler(window_ptr, Box::into_raw(closure_data) as *mut _); + } + + loop { + if !self.pop_event() { + unsafe { crate::run_event_handler(window_ptr, CWindowEvent::AboutToWait) }; + } + } + } + + pub fn request_redraw(&mut self) { + unsafe { crate::request_redraw(self.ptr) } + } +} -- cgit v1.2.3