From c893e4faec212953174c12c68538d55929c90ad3 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Tue, 18 Nov 2014 17:55:26 +0100 Subject: [PATCH] Add get_api() function --- src/android/mod.rs | 4 ++++ src/lib.rs | 24 ++++++++++++++++++++++++ src/osx/mod.rs | 4 ++++ src/win32/mod.rs | 10 ++++++++++ src/x11/headless.rs | 5 +++++ src/x11/window/mod.rs | 5 +++++ 6 files changed, 52 insertions(+) diff --git a/src/android/mod.rs b/src/android/mod.rs index cdd5293a..8093d509 100644 --- a/src/android/mod.rs +++ b/src/android/mod.rs @@ -265,6 +265,10 @@ impl Window { pub fn platform_display(&self) -> *mut libc::c_void { self.display as *mut libc::c_void } + + pub fn get_api(&self) -> ::Api { + ::Api::OpenGlEs + } } #[unsafe_destructor] diff --git a/src/lib.rs b/src/lib.rs index b27ef974..bcfb11aa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -84,6 +84,14 @@ impl std::error::Error for CreationError { } } +/// All APIs related to OpenGL that you can possibly get while using glutin. +pub enum Api { + /// The classical OpenGL. Available on Windows, Linux, OS/X. + OpenGl, + /// OpenGL embedded system. Available on Linux, Android. + OpenGlEs, +} + /// Object that allows you to build windows. #[cfg(feature = "window")] pub struct WindowBuilder<'a> { @@ -457,6 +465,15 @@ impl Window { pub unsafe fn platform_display(&self) -> *mut libc::c_void { self.window.platform_display() } + + /// Returns the API that is currently provided by this window. + /// + /// - On Windows and OS/X, this always returns `OpenGl`. + /// - On Android, this always returns `OpenGlEs`. + /// - On Linux, it must be checked at runtime. + pub fn get_api(&self) -> Api { + self.window.get_api() + } } #[cfg(feature = "window")] @@ -488,6 +505,13 @@ impl HeadlessContext { pub fn get_proc_address(&self, addr: &str) -> *const libc::c_void { self.context.get_proc_address(addr) as *const libc::c_void } + + /// Returns the API that is currently provided by this window. + /// + /// See `Window::get_api` for more infos. + pub fn get_api(&self) -> Api { + self.context.get_api() + } } #[cfg(feature = "headless")] diff --git a/src/osx/mod.rs b/src/osx/mod.rs index fbdedfd0..c69486a7 100644 --- a/src/osx/mod.rs +++ b/src/osx/mod.rs @@ -400,4 +400,8 @@ impl Window { pub fn platform_display(&self) -> *mut libc::c_void { unimplemented!() } + + pub fn get_api(&self) -> ::Api { + ::Api::OpenGl + } } diff --git a/src/win32/mod.rs b/src/win32/mod.rs index 8339cb12..5ba5a26c 100644 --- a/src/win32/mod.rs +++ b/src/win32/mod.rs @@ -41,6 +41,11 @@ impl HeadlessContext { pub fn get_proc_address(&self, addr: &str) -> *const () { self.0.get_proc_address(addr) } + + /// See the docs in the crate root file. + pub fn get_api(&self) -> ::Api { + ::Api::OpenGl + } } /// The Win32 implementation of the main `Window` object. @@ -252,6 +257,11 @@ impl Window { pub fn platform_display(&self) -> *mut libc::c_void { unimplemented!() } + + /// See the docs in the crate root file. + pub fn get_api(&self) -> ::Api { + ::Api::OpenGl + } } #[unsafe_destructor] diff --git a/src/x11/headless.rs b/src/x11/headless.rs index e6479d60..78fb985c 100644 --- a/src/x11/headless.rs +++ b/src/x11/headless.rs @@ -47,6 +47,11 @@ impl HeadlessContext { }) } } + + /// See the docs in the crate root file. + pub fn get_api(&self) -> ::Api { + ::Api::OpenGl + } } impl Drop for HeadlessContext { diff --git a/src/x11/window/mod.rs b/src/x11/window/mod.rs index 7bce19f5..f22d1f89 100644 --- a/src/x11/window/mod.rs +++ b/src/x11/window/mod.rs @@ -535,6 +535,11 @@ impl Window { pub fn platform_display(&self) -> *mut libc::c_void { self.display as *mut libc::c_void } + + /// See the docs in the crate root file. + pub fn get_api(&self) -> ::Api { + ::Api::OpenGl + } } impl Drop for Window {