api changes
This commit is contained in:
@@ -7,8 +7,12 @@ use crate::prelude::*;
|
||||
pub struct Entry(Rc<dyn EntryTrait>);
|
||||
|
||||
impl Entry {
|
||||
/// Constructs a new Xr entry
|
||||
pub fn new() -> Self {
|
||||
todo!()
|
||||
#[cfg(target_family = "wasm")]
|
||||
return crate::backend::webxr::WebXrEntry::new().into();
|
||||
#[cfg(not(target_family = "wasm"))]
|
||||
return crate::backend::oxr::OXrEntry::new().into();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +22,9 @@ pub struct Instance(Rc<dyn InstanceTrait>);
|
||||
#[derive(Clone)]
|
||||
pub struct Session(Rc<dyn SessionTrait>);
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct View(Rc<dyn ViewTrait>);
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct Input(Rc<dyn InputTrait>);
|
||||
|
||||
@@ -48,6 +55,14 @@ impl Deref for Session {
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for View {
|
||||
type Target = dyn ViewTrait;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&*self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for Input {
|
||||
type Target = dyn InputTrait;
|
||||
|
||||
@@ -86,6 +101,12 @@ impl<T: SessionTrait + 'static> From<T> for Session {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: ViewTrait + 'static> From<T> for View {
|
||||
fn from(value: T) -> Self {
|
||||
Self(Rc::new(value))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: InputTrait + 'static> From<T> for Input {
|
||||
fn from(value: T) -> Self {
|
||||
Self(Rc::new(value))
|
||||
|
||||
@@ -32,6 +32,15 @@ pub trait SessionTrait {
|
||||
fn end_frame(&self) -> Result<()>;
|
||||
}
|
||||
|
||||
pub trait ViewTrait {
|
||||
/// Returns the [TextureView] used to render this view.
|
||||
fn texture_view(&self) -> TextureView;
|
||||
/// Returns the [Pose] representing the current position of this view.
|
||||
fn pose(&self) -> Pose;
|
||||
/// Returns the projection matrix for the current view.
|
||||
fn projection_matrix(&self) -> glam::Mat4;
|
||||
}
|
||||
|
||||
pub trait InputTrait {
|
||||
/// Get the haptic action at the specified path.
|
||||
fn get_haptics(&self, path: ActionId) -> Result<Action<Haptic>>;
|
||||
|
||||
@@ -16,6 +16,17 @@ use utils::*;
|
||||
#[derive(Clone)]
|
||||
pub struct WebXrEntry(web_sys::XrSystem);
|
||||
|
||||
impl WebXrEntry {
|
||||
pub fn new() -> Self {
|
||||
Self(
|
||||
web_sys::window()
|
||||
.expect("No window available in current environment")
|
||||
.navigator()
|
||||
.xr(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl EntryTrait for WebXrEntry {
|
||||
fn available_extensions(&self) -> Result<ExtensionSet> {
|
||||
Ok(ExtensionSet::default())
|
||||
@@ -45,7 +56,7 @@ impl InstanceTrait for WebXrInstance {
|
||||
self.exts
|
||||
}
|
||||
|
||||
fn create_session(&self, info: SessionCreateInfo) -> Result<Session> {
|
||||
fn create_session(&self, _info: SessionCreateInfo) -> Result<Session> {
|
||||
Ok(WebXrSession {
|
||||
instance: self.clone().into(),
|
||||
session: self
|
||||
@@ -170,15 +181,15 @@ impl InputTrait for WebXrInput {
|
||||
Ok(WebXrHaptics(haptics, path).into())
|
||||
}
|
||||
|
||||
fn get_pose(&self, path: ActionId) -> Result<Action<Pose>> {
|
||||
fn get_pose(&self, _path: ActionId) -> Result<Action<Pose>> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn get_float(&self, path: ActionId) -> Result<Action<f32>> {
|
||||
fn get_float(&self, _path: ActionId) -> Result<Action<f32>> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn get_bool(&self, path: ActionId) -> Result<Action<bool>> {
|
||||
fn get_bool(&self, _path: ActionId) -> Result<Action<bool>> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ pub enum XrError {
|
||||
}
|
||||
|
||||
impl Display for XrError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
fn fmt(&self, _f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user