aboutsummaryrefslogtreecommitdiff
path: root/crates/fparkan-platform
diff options
context:
space:
mode:
Diffstat (limited to 'crates/fparkan-platform')
-rw-r--r--crates/fparkan-platform/Cargo.toml11
-rw-r--r--crates/fparkan-platform/src/lib.rs93
2 files changed, 104 insertions, 0 deletions
diff --git a/crates/fparkan-platform/Cargo.toml b/crates/fparkan-platform/Cargo.toml
new file mode 100644
index 0000000..dc103f2
--- /dev/null
+++ b/crates/fparkan-platform/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "fparkan-platform"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+repository.workspace = true
+
+[dependencies]
+
+[lints]
+workspace = true
diff --git a/crates/fparkan-platform/src/lib.rs b/crates/fparkan-platform/src/lib.rs
new file mode 100644
index 0000000..cfa021b
--- /dev/null
+++ b/crates/fparkan-platform/src/lib.rs
@@ -0,0 +1,93 @@
+#![forbid(unsafe_code)]
+//! Platform ports for clocks, input, events, windows, and graphics requests.
+
+/// Monotonic instant.
+#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
+pub struct MonotonicInstant(pub u64);
+
+/// Monotonic clock.
+pub trait MonotonicClock {
+ /// Current instant.
+ fn now(&self) -> MonotonicInstant;
+}
+
+/// Platform event.
+#[derive(Clone, Debug, Eq, PartialEq)]
+pub enum PlatformEvent {
+ /// Quit requested.
+ Quit,
+}
+
+/// Platform error.
+#[derive(Debug)]
+pub enum PlatformError {
+ /// Backend failed.
+ Backend,
+}
+
+impl std::fmt::Display for PlatformError {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "{self:?}")
+ }
+}
+
+impl std::error::Error for PlatformError {}
+
+/// Event source.
+pub trait EventSource {
+ /// Polls events.
+ ///
+ /// # Errors
+ ///
+ /// Returns [`PlatformError`] when the backend cannot collect events.
+ fn poll(&mut self, out: &mut Vec<PlatformEvent>) -> Result<(), PlatformError>;
+}
+
+/// Physical size.
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub struct PhysicalSize {
+ /// Width.
+ pub width: u32,
+ /// Height.
+ pub height: u32,
+}
+
+/// Window port.
+pub trait WindowPort {
+ /// Drawable size.
+ fn drawable_size(&self) -> PhysicalSize;
+ /// Presents.
+ ///
+ /// # Errors
+ ///
+ /// Returns [`PlatformError`] when the backend cannot present the current
+ /// frame.
+ fn present(&mut self) -> Result<(), PlatformError>;
+}
+
+/// Graphics profile.
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub enum GraphicsProfile {
+ /// Desktop core.
+ DesktopCore,
+ /// Embedded profile.
+ Embedded,
+}
+
+/// Version.
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub struct Version {
+ /// Major.
+ pub major: u8,
+ /// Minor.
+ pub minor: u8,
+}
+
+/// Graphics context request.
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub struct GraphicsContextRequest {
+ /// Profile.
+ pub profile: GraphicsProfile,
+ /// Version.
+ pub version: Version,
+}