From d1be0566969974bd70f2d77915b6936095c894c6 Mon Sep 17 00:00:00 2001 From: HampusM Date: Fri, 6 Oct 2023 23:09:57 +0200 Subject: feat: add engine library base --- engine/src/lib.rs | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 engine/src/lib.rs (limited to 'engine/src/lib.rs') diff --git a/engine/src/lib.rs b/engine/src/lib.rs new file mode 100644 index 0000000..618bc75 --- /dev/null +++ b/engine/src/lib.rs @@ -0,0 +1,74 @@ +#![deny(clippy::all, clippy::pedantic)] + +use glfw::Window; +pub use glfw::WindowSize; + +mod renderer; + +pub mod vector; + +pub struct Engine +{ + window: Window, +} + +impl Engine +{ + /// Creates and initializes a new engine. + /// + /// # Errors + /// Will return `Err` if window creation or window configuration fails. + pub fn new(window_size: &WindowSize, window_title: &str) -> Result + { + let window = Window::create(window_size, window_title) + .map_err(Error::CreateWindowFailed)?; + + window + .make_context_current() + .map_err(Error::ConfigureWindowFailed)?; + + crate::renderer::initialize(&window).map_err(Error::InitializeRendererFailed)?; + + Ok(Self { window }) + } + + /// Starts the engine. + /// + /// # Errors + /// Will return `Err` if updating the window fails. + pub fn start(&self, mut func: impl FnMut()) -> Result<(), Error> + { + while !self.window.should_close() { + func(); + + crate::renderer::render(); + + self.window + .swap_buffers() + .map_err(Error::UpdateWindowFailed)?; + + self.window + .poll_events() + .map_err(Error::UpdateWindowFailed)?; + } + + Ok(()) + } +} + +/// Engine Error +#[derive(Debug, thiserror::Error)] +pub enum Error +{ + #[error("Failed to create window")] + CreateWindowFailed(#[source] glfw::Error), + + #[error("Failed to configure window")] + ConfigureWindowFailed(#[source] glfw::Error), + + #[error("Failed to initialize renderer")] + InitializeRendererFailed(#[source] renderer::Error), + + #[error("Failed to update window")] + UpdateWindowFailed(#[source] glfw::Error), +} -- cgit v1.2.3-18-g5258