From 14ab782e44d53163f9efeddb522baf1567196697 Mon Sep 17 00:00:00 2001 From: Nova Date: Fri, 2 Feb 2024 13:30:10 -0500 Subject: [PATCH] feat: graphics bindings --- openxr/src/graphics/opengl.rs | 35 ++++++++++++++++++++++++++++++++ openxr/src/graphics/opengles.rs | 36 ++++++++++++++++++++++++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/openxr/src/graphics/opengl.rs b/openxr/src/graphics/opengl.rs index 9c9501b3..273376a3 100644 --- a/openxr/src/graphics/opengl.rs +++ b/openxr/src/graphics/opengl.rs @@ -118,6 +118,35 @@ impl Graphics for OpenGL { ))?; Ok(out) } + SessionCreateInfo::Egl { + display, + config, + context, + get_proc_address, + } => { + let binding = sys::GraphicsBindingEGLMNDX { + ty: sys::GraphicsBindingEGLMNDX::TYPE, + next: ptr::null(), + display, + config, + context, + get_proc_address: Some(get_proc_address), + }; + let info = sys::SessionCreateInfo { + ty: sys::SessionCreateInfo::TYPE, + next: &binding as *const _ as *const _, + create_flags: Default::default(), + system_id: system, + }; + let mut out = sys::Session::NULL; + cvt((instance.fp().create_session)( + instance.as_raw(), + &info, + &mut out, + ))?; + + Ok(out) + } } } @@ -150,6 +179,12 @@ pub struct Requirements { } pub enum SessionCreateInfo { + Egl { + display: EGLDisplay, + config: EGLConfig, + context: EGLContext, + get_proc_address: EglGetProcAddressMNDX, + }, Xlib { x_display: *mut Display, visualid: u32, diff --git a/openxr/src/graphics/opengles.rs b/openxr/src/graphics/opengles.rs index fec7a3d4..e8084b4d 100644 --- a/openxr/src/graphics/opengles.rs +++ b/openxr/src/graphics/opengles.rs @@ -1,6 +1,5 @@ use std::ptr; -#[cfg(target_os = "android")] use sys::platform::*; use crate::*; @@ -73,6 +72,35 @@ impl Graphics for OpenGlEs { &mut out, ))?; + Ok(out) + } + SessionCreateInfo::Egl { + display, + config, + context, + get_proc_address, + } => { + let binding = sys::GraphicsBindingEGLMNDX { + ty: sys::GraphicsBindingEGLMNDX::TYPE, + next: ptr::null(), + display, + config, + context, + get_proc_address: Some(get_proc_address), + }; + let info = sys::SessionCreateInfo { + ty: sys::SessionCreateInfo::TYPE, + next: &binding as *const _ as *const _, + create_flags: Default::default(), + system_id: system, + }; + let mut out = sys::Session::NULL; + cvt((instance.fp().create_session)( + instance.as_raw(), + &info, + &mut out, + ))?; + Ok(out) } } @@ -113,4 +141,10 @@ pub enum SessionCreateInfo { config: EGLConfig, context: EGLContext, }, + Egl { + display: EGLDisplay, + config: EGLConfig, + context: EGLContext, + get_proc_address: EglGetProcAddressMNDX, + }, }