summaryrefslogtreecommitdiff
path: root/glfw
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2024-05-19 13:12:59 +0200
committerHampusM <hampus@hampusmat.com>2024-05-19 13:12:59 +0200
commit355a19e630de61397bf70b69b7ab2356318be2b8 (patch)
tree71774709c0407375850c54fe59feb542e05fdb51 /glfw
parent3884f9bdd775afd3a40503286eb5d06ef72eeb1a (diff)
fix(glfw): check major version of GLFW shared library
Diffstat (limited to 'glfw')
-rw-r--r--glfw/glfw.h4
-rw-r--r--glfw/src/init.rs14
-rw-r--r--glfw/src/lib.rs3
3 files changed, 21 insertions, 0 deletions
diff --git a/glfw/glfw.h b/glfw/glfw.h
index f5fa479..7b435c0 100644
--- a/glfw/glfw.h
+++ b/glfw/glfw.h
@@ -1,2 +1,6 @@
#include <GLFW/glfw3.h>
+#if GLFW_VERSION_MAJOR != 3
+#error "Unsupported major version of GLFW. Must be 3"
+#endif
+
diff --git a/glfw/src/init.rs b/glfw/src/init.rs
index b42bb52..df5a989 100644
--- a/glfw/src/init.rs
+++ b/glfw/src/init.rs
@@ -1,6 +1,12 @@
+use std::ffi::c_int;
+use std::ptr::null_mut;
+
use crate::util::is_main_thread;
use crate::{get_glfw_error, Error};
+/// GLFW 3.x.x is supported
+static SUPPORTED_GLFW_VERSION_MAJOR: c_int = 3;
+
/// Initializes GLFW and returns a initialization token.
///
/// # Errors
@@ -13,6 +19,14 @@ pub fn initialize() -> Result<Glfw, Error>
return Err(Error::NotInMainThread);
}
+ let mut major: c_int = 0;
+
+ unsafe { crate::ffi::glfwGetVersion(&mut major, null_mut(), null_mut()) };
+
+ if major != SUPPORTED_GLFW_VERSION_MAJOR {
+ return Err(Error::UnsupportedVersion);
+ }
+
// SAFETY: The current thread is the main thread
let success = unsafe { crate::ffi::glfwInit() };
diff --git a/glfw/src/lib.rs b/glfw/src/lib.rs
index 7d2f25c..f858766 100644
--- a/glfw/src/lib.rs
+++ b/glfw/src/lib.rs
@@ -22,6 +22,9 @@ pub enum Error
#[error("An internal nul byte was found in the window title")]
InternalNulByteInWindowTitle,
+ #[error("This version of GLFW is unsupported")]
+ UnsupportedVersion,
+
/// GLFW error.
#[error("GLFW error {0} occured. {1}")]
GlfwError(i32, String),