mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Update to use webxr_api::ViewerPose
This commit is contained in:
parent
794624b42b
commit
a97dcd9ad6
4 changed files with 16 additions and 9 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -6471,7 +6471,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "webxr"
|
name = "webxr"
|
||||||
version = "0.0.1"
|
version = "0.0.1"
|
||||||
source = "git+https://github.com/servo/webxr#a73b150f1e1a946fd90bd1ccf0056e35c3eef0d2"
|
source = "git+https://github.com/servo/webxr#3f754a11eb3e9771f6020ec5a25ae94ed1e11f07"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_injected_glue",
|
"android_injected_glue",
|
||||||
"bindgen",
|
"bindgen",
|
||||||
|
@ -6494,7 +6494,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "webxr-api"
|
name = "webxr-api"
|
||||||
version = "0.0.1"
|
version = "0.0.1"
|
||||||
source = "git+https://github.com/servo/webxr#a73b150f1e1a946fd90bd1ccf0056e35c3eef0d2"
|
source = "git+https://github.com/servo/webxr#3f754a11eb3e9771f6020ec5a25ae94ed1e11f07"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"euclid",
|
"euclid",
|
||||||
"ipc-channel",
|
"ipc-channel",
|
||||||
|
|
|
@ -85,11 +85,16 @@ impl XRFrameMethods for XRFrame {
|
||||||
} else {
|
} else {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
};
|
};
|
||||||
|
let viewer_pose = if let Some(pose) = self.data.pose.as_ref() {
|
||||||
|
pose
|
||||||
|
} else {
|
||||||
|
return Ok(None);
|
||||||
|
};
|
||||||
Ok(Some(XRViewerPose::new(
|
Ok(Some(XRViewerPose::new(
|
||||||
&self.global(),
|
&self.global(),
|
||||||
&self.session,
|
&self.session,
|
||||||
pose,
|
pose,
|
||||||
&self.data.views,
|
viewer_pose,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ impl XRReferenceSpace {
|
||||||
// get_viewer_pose(eye_level) = get_pose(eye_level).inverse() * get_pose(viewer_space)
|
// get_viewer_pose(eye_level) = get_pose(eye_level).inverse() * get_pose(viewer_space)
|
||||||
// = I * viewer_pose
|
// = I * viewer_pose
|
||||||
// = viewer_pose
|
// = viewer_pose
|
||||||
let viewer_pose: ApiViewerPose = cast_transform(base_pose.transform?);
|
let viewer_pose: ApiViewerPose = cast_transform(base_pose.pose.as_ref()?.transform);
|
||||||
|
|
||||||
// we get viewer poses in eye-level space by default
|
// we get viewer poses in eye-level space by default
|
||||||
Some(viewer_pose)
|
Some(viewer_pose)
|
||||||
|
@ -122,7 +122,7 @@ impl XRReferenceSpace {
|
||||||
// get_viewer_pose(floor_level) = get_pose(floor_level).inverse() * get_pose(viewer_space)
|
// get_viewer_pose(floor_level) = get_pose(floor_level).inverse() * get_pose(viewer_space)
|
||||||
// = floor_to_native.inverse() * viewer_pose
|
// = floor_to_native.inverse() * viewer_pose
|
||||||
// = native_to_floor * viewer_pose
|
// = native_to_floor * viewer_pose
|
||||||
let viewer_pose = base_pose.transform?;
|
let viewer_pose = base_pose.pose.as_ref()?.transform;
|
||||||
let native_to_floor = self
|
let native_to_floor = self
|
||||||
.upcast::<XRSpace>()
|
.upcast::<XRSpace>()
|
||||||
.session()
|
.session()
|
||||||
|
@ -171,7 +171,9 @@ impl XRReferenceSpace {
|
||||||
.with_session(|s| s.floor_transform())?;
|
.with_session(|s| s.floor_transform())?;
|
||||||
Some(cast_transform(native_to_floor.inverse()))
|
Some(cast_transform(native_to_floor.inverse()))
|
||||||
},
|
},
|
||||||
XRReferenceSpaceType::Viewer => base_pose.transform.map(cast_transform),
|
XRReferenceSpaceType::Viewer => {
|
||||||
|
Some(cast_transform(base_pose.pose.as_ref()?.transform))
|
||||||
|
},
|
||||||
_ => unimplemented!(),
|
_ => unimplemented!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ use dom_struct::dom_struct;
|
||||||
use js::conversions::ToJSValConvertible;
|
use js::conversions::ToJSValConvertible;
|
||||||
use js::jsapi::Heap;
|
use js::jsapi::Heap;
|
||||||
use js::jsval::{JSVal, UndefinedValue};
|
use js::jsval::{JSVal, UndefinedValue};
|
||||||
use webxr_api::Views;
|
use webxr_api::{ViewerPose, Views};
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct XRViewerPose {
|
pub struct XRViewerPose {
|
||||||
|
@ -39,11 +39,11 @@ impl XRViewerPose {
|
||||||
global: &GlobalScope,
|
global: &GlobalScope,
|
||||||
session: &XRSession,
|
session: &XRSession,
|
||||||
pose: ApiViewerPose,
|
pose: ApiViewerPose,
|
||||||
frame_views: &Views,
|
viewer_pose: &ViewerPose,
|
||||||
) -> DomRoot<XRViewerPose> {
|
) -> DomRoot<XRViewerPose> {
|
||||||
let _ac = enter_realm(&*global);
|
let _ac = enter_realm(&*global);
|
||||||
rooted_vec!(let mut views);
|
rooted_vec!(let mut views);
|
||||||
match frame_views {
|
match &viewer_pose.views {
|
||||||
Views::Inline => views.push(XRView::new(
|
Views::Inline => views.push(XRView::new(
|
||||||
global,
|
global,
|
||||||
session,
|
session,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue