mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Dirty layers when changing visibility state
This commit is contained in:
parent
d146303f1d
commit
453be48c94
2 changed files with 18 additions and 14 deletions
|
@ -14,6 +14,9 @@ use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRFrameRequestCal
|
||||||
use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRSessionMethods;
|
use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRSessionMethods;
|
||||||
use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRVisibilityState;
|
use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRVisibilityState;
|
||||||
use crate::dom::bindings::codegen::Bindings::XRSystemBinding::XRSessionMode;
|
use crate::dom::bindings::codegen::Bindings::XRSystemBinding::XRSessionMode;
|
||||||
|
use crate::dom::bindings::codegen::Bindings::XRWebGLLayerBinding::{
|
||||||
|
XRWebGLLayerMethods, XRWebGLRenderingContext,
|
||||||
|
};
|
||||||
use crate::dom::bindings::error::{Error, ErrorResult};
|
use crate::dom::bindings::error::{Error, ErrorResult};
|
||||||
use crate::dom::bindings::inheritance::Castable;
|
use crate::dom::bindings::inheritance::Castable;
|
||||||
use crate::dom::bindings::refcounted::Trusted;
|
use crate::dom::bindings::refcounted::Trusted;
|
||||||
|
@ -322,6 +325,9 @@ impl XRSession {
|
||||||
self,
|
self,
|
||||||
);
|
);
|
||||||
event.upcast::<Event>().fire(self.upcast());
|
event.upcast::<Event>().fire(self.upcast());
|
||||||
|
// The page may be visible again, dirty the layers
|
||||||
|
// This also wakes up the event loop if necessary
|
||||||
|
self.dirty_layers();
|
||||||
},
|
},
|
||||||
XREvent::AddInput(info) => {
|
XREvent::AddInput(info) => {
|
||||||
self.input_sources.add_input_sources(self, &[info]);
|
self.input_sources.add_input_sources(self, &[info]);
|
||||||
|
@ -452,6 +458,17 @@ impl XRSession {
|
||||||
pub fn session_id(&self) -> SessionId {
|
pub fn session_id(&self) -> SessionId {
|
||||||
self.session.borrow().id()
|
self.session.borrow().id()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn dirty_layers(&self) {
|
||||||
|
if let Some(layer) = self.RenderState().GetBaseLayer() {
|
||||||
|
match layer.Context() {
|
||||||
|
XRWebGLRenderingContext::WebGLRenderingContext(c) => c.mark_as_dirty(),
|
||||||
|
XRWebGLRenderingContext::WebGL2RenderingContext(c) => {
|
||||||
|
c.base_context().mark_as_dirty()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl XRSessionMethods for XRSession {
|
impl XRSessionMethods for XRSession {
|
||||||
|
|
|
@ -3,13 +3,8 @@
|
||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
use crate::dom::bindings::cell::DomRefCell;
|
use crate::dom::bindings::cell::DomRefCell;
|
||||||
use crate::dom::bindings::codegen::Bindings::XRRenderStateBinding::XRRenderStateMethods;
|
|
||||||
use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRSessionMethods;
|
|
||||||
use crate::dom::bindings::codegen::Bindings::XRSystemBinding::XRSessionInit;
|
use crate::dom::bindings::codegen::Bindings::XRSystemBinding::XRSessionInit;
|
||||||
use crate::dom::bindings::codegen::Bindings::XRSystemBinding::{XRSessionMode, XRSystemMethods};
|
use crate::dom::bindings::codegen::Bindings::XRSystemBinding::{XRSessionMode, XRSystemMethods};
|
||||||
use crate::dom::bindings::codegen::Bindings::XRWebGLLayerBinding::{
|
|
||||||
XRWebGLLayerMethods, XRWebGLRenderingContext,
|
|
||||||
};
|
|
||||||
use crate::dom::bindings::conversions::{ConversionResult, FromJSValConvertible};
|
use crate::dom::bindings::conversions::{ConversionResult, FromJSValConvertible};
|
||||||
use crate::dom::bindings::error::Error;
|
use crate::dom::bindings::error::Error;
|
||||||
use crate::dom::bindings::refcounted::{Trusted, TrustedPromise};
|
use crate::dom::bindings::refcounted::{Trusted, TrustedPromise};
|
||||||
|
@ -86,17 +81,9 @@ impl XRSystem {
|
||||||
if let Some(active) = self.active_immersive_session.get() {
|
if let Some(active) = self.active_immersive_session.get() {
|
||||||
if Dom::from_ref(&*active) == Dom::from_ref(session) {
|
if Dom::from_ref(&*active) == Dom::from_ref(session) {
|
||||||
self.active_immersive_session.set(None);
|
self.active_immersive_session.set(None);
|
||||||
|
|
||||||
// Dirty the canvas, since it has been skipping this step whilst in immersive
|
// Dirty the canvas, since it has been skipping this step whilst in immersive
|
||||||
// mode
|
// mode
|
||||||
if let Some(layer) = session.RenderState().GetBaseLayer() {
|
session.dirty_layers();
|
||||||
match layer.Context() {
|
|
||||||
XRWebGLRenderingContext::WebGLRenderingContext(c) => c.mark_as_dirty(),
|
|
||||||
XRWebGLRenderingContext::WebGL2RenderingContext(c) => {
|
|
||||||
c.base_context().mark_as_dirty()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.active_inline_sessions
|
self.active_inline_sessions
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue