aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglframebuffer.rs
diff options
context:
space:
mode:
authorbors-servo <servo-ops@mozilla.com>2020-04-08 16:30:55 -0400
committerGitHub <noreply@github.com>2020-04-08 16:30:55 -0400
commit5e91e48293406cebf6fef4ed03bcae568021c348 (patch)
treef4584063c504ca3ca86140d70f76dcbfbaa7518b /components/script/dom/webglframebuffer.rs
parente1dd0d9bca5033c37498733c8107dcc686bea807 (diff)
parentc002a295829cab4e6165b488cd4ee6a89411e276 (diff)
downloadservo-5e91e48293406cebf6fef4ed03bcae568021c348.tar.gz
servo-5e91e48293406cebf6fef4ed03bcae568021c348.zip
Auto merge of #26146 - jdm:xr-webgl2, r=Manishearth
Support WebGL2 contexts in immersive mode - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #26138
Diffstat (limited to 'components/script/dom/webglframebuffer.rs')
-rw-r--r--components/script/dom/webglframebuffer.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/components/script/dom/webglframebuffer.rs b/components/script/dom/webglframebuffer.rs
index 1e4b75ac86d..4b2f7c7d56e 100644
--- a/components/script/dom/webglframebuffer.rs
+++ b/components/script/dom/webglframebuffer.rs
@@ -5,6 +5,7 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl
use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::WebGL2RenderingContextBinding::WebGL2RenderingContextConstants as constants;
+use crate::dom::bindings::codegen::Bindings::XRWebGLLayerBinding::XRWebGLRenderingContext;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom};
@@ -141,10 +142,14 @@ impl WebGLFramebuffer {
// https://github.com/servo/servo/issues/24498
pub fn maybe_new_webxr(
session: &XRSession,
- context: &WebGLRenderingContext,
+ context: &XRWebGLRenderingContext,
size: Size2D<i32, Viewport>,
) -> Option<(WebXRSwapChainId, DomRoot<Self>)> {
let (sender, receiver) = webgl_channel().unwrap();
+ let context = match context {
+ XRWebGLRenderingContext::WebGLRenderingContext(ref ctx) => DomRoot::from_ref(&**ctx),
+ XRWebGLRenderingContext::WebGL2RenderingContext(ref ctx) => ctx.base_context(),
+ };
let _ = context.webgl_sender().send_create_webxr_swap_chain(
size.to_untyped(),
sender,
@@ -153,7 +158,7 @@ impl WebGLFramebuffer {
let swap_chain_id = receiver.recv().unwrap()?;
let framebuffer_id =
WebGLFramebufferId::Opaque(WebGLOpaqueFramebufferId::WebXR(swap_chain_id));
- let framebuffer = WebGLFramebuffer::new(context, framebuffer_id);
+ let framebuffer = WebGLFramebuffer::new(&*context, framebuffer_id);
framebuffer.size.set(Some((size.width, size.height)));
framebuffer.status.set(constants::FRAMEBUFFER_COMPLETE);
framebuffer.xr_session.set(Some(session));