mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Add XRRenderState
This commit is contained in:
parent
5ae562bfc3
commit
1dc7636135
3 changed files with 82 additions and 0 deletions
|
@ -538,6 +538,7 @@ pub mod xr;
|
||||||
pub mod xrframe;
|
pub mod xrframe;
|
||||||
pub mod xrlayer;
|
pub mod xrlayer;
|
||||||
pub mod xrreferencespace;
|
pub mod xrreferencespace;
|
||||||
|
pub mod xrrenderstate;
|
||||||
pub mod xrrigidtransform;
|
pub mod xrrigidtransform;
|
||||||
pub mod xrsession;
|
pub mod xrsession;
|
||||||
pub mod xrspace;
|
pub mod xrspace;
|
||||||
|
|
17
components/script/dom/webidls/XRRenderState.webidl
Normal file
17
components/script/dom/webidls/XRRenderState.webidl
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
// https://immersive-web.github.io/webxr/#xrrenderstate-interface
|
||||||
|
|
||||||
|
dictionary XRRenderStateInit {
|
||||||
|
double depthNear = 0.1;
|
||||||
|
double depthFar = 1000.0;
|
||||||
|
XRLayer? baseLayer = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
[SecureContext, Exposed=Window] interface XRRenderState {
|
||||||
|
readonly attribute double depthNear;
|
||||||
|
readonly attribute double depthFar;
|
||||||
|
readonly attribute XRLayer? baseLayer;
|
||||||
|
};
|
64
components/script/dom/xrrenderstate.rs
Normal file
64
components/script/dom/xrrenderstate.rs
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
use crate::dom::bindings::codegen::Bindings::XRRenderStateBinding::{self, XRRenderStateMethods};
|
||||||
|
use crate::dom::bindings::num::Finite;
|
||||||
|
use crate::dom::bindings::reflector::reflect_dom_object;
|
||||||
|
use crate::dom::bindings::reflector::Reflector;
|
||||||
|
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
|
||||||
|
use crate::dom::globalscope::GlobalScope;
|
||||||
|
use crate::dom::xrlayer::XRLayer;
|
||||||
|
|
||||||
|
use dom_struct::dom_struct;
|
||||||
|
use std::cell::Cell;
|
||||||
|
|
||||||
|
#[dom_struct]
|
||||||
|
pub struct XRRenderState {
|
||||||
|
reflector_: Reflector,
|
||||||
|
depth_near: Cell<f64>,
|
||||||
|
depth_far: Cell<f64>,
|
||||||
|
layer: MutNullableDom<XRLayer>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl XRRenderState {
|
||||||
|
pub fn new_inherited(
|
||||||
|
depth_near: f64,
|
||||||
|
depth_far: f64,
|
||||||
|
layer: Option<&XRLayer>,
|
||||||
|
) -> XRRenderState {
|
||||||
|
XRRenderState {
|
||||||
|
reflector_: Reflector::new(),
|
||||||
|
depth_near: Cell::new(depth_near),
|
||||||
|
depth_far: Cell::new(depth_far),
|
||||||
|
layer: MutNullableDom::new(layer),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn new(
|
||||||
|
global: &GlobalScope,
|
||||||
|
depth_near: f64,
|
||||||
|
depth_far: f64,
|
||||||
|
layer: Option<&XRLayer>,
|
||||||
|
) -> DomRoot<XRRenderState> {
|
||||||
|
reflect_dom_object(
|
||||||
|
Box::new(XRRenderState::new_inherited(depth_near, depth_far, layer)),
|
||||||
|
global,
|
||||||
|
XRRenderStateBinding::Wrap,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl XRRenderStateMethods for XRRenderState {
|
||||||
|
fn DepthNear(&self) -> Finite<f64> {
|
||||||
|
Finite::wrap(self.depth_near.get())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn DepthFar(&self) -> Finite<f64> {
|
||||||
|
Finite::wrap(self.depth_far.get())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn GetBaseLayer(&self) -> Option<DomRoot<XRLayer>> {
|
||||||
|
self.layer.get()
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue