aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorDaniel Adams <70986246+msub2@users.noreply.github.com>2024-09-22 11:55:31 +0000
committerGitHub <noreply@github.com>2024-09-22 11:55:31 +0000
commit3a0d27b2312c6396e85178615290ac2ec3592ce1 (patch)
tree176d477ddbcda90e0c1ed1041868b67b28f92fbf /components/script/dom
parent8276673bae999c3e74d71c81ca84842ed1365c89 (diff)
downloadservo-3a0d27b2312c6396e85178615290ac2ec3592ce1.tar.gz
servo-3a0d27b2312c6396e85178615290ac2ec3592ce1.zip
webgl: Update IDL exposed members (#33509)
* Update IDLs to expose on Workers Signed-off-by: Daniel Adams <msub2official@gmail.com> * Update usage of Canvas/OffscreenCanvas union, add label Signed-off-by: Daniel Adams <msub2official@gmail.com> * Update WPT expectations Signed-off-by: Daniel Adams <msub2official@gmail.com> * Fix match arm Signed-off-by: Daniel Adams <msub2official@gmail.com> * Add missing spec links Signed-off-by: Daniel Adams <msub2official@gmail.com> * Update expectations Signed-off-by: Daniel Adams <msub2official@gmail.com> * Update interfaces.worker.js Signed-off-by: Daniel Adams <msub2official@gmail.com> --------- Signed-off-by: Daniel Adams <msub2official@gmail.com>
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/htmlcanvaselement.rs8
-rw-r--r--components/script/dom/webgl2renderingcontext.rs9
-rw-r--r--components/script/dom/webglobject.rs17
-rw-r--r--components/script/dom/webglrenderingcontext.rs69
-rw-r--r--components/script/dom/webidls/WebGLActiveInfo.webidl2
-rw-r--r--components/script/dom/webidls/WebGLBuffer.webidl2
-rw-r--r--components/script/dom/webidls/WebGLFramebuffer.webidl2
-rw-r--r--components/script/dom/webidls/WebGLObject.webidl3
-rw-r--r--components/script/dom/webidls/WebGLProgram.webidl2
-rw-r--r--components/script/dom/webidls/WebGLRenderbuffer.webidl2
-rw-r--r--components/script/dom/webidls/WebGLRenderingContext.webidl6
-rw-r--r--components/script/dom/webidls/WebGLShader.webidl2
-rw-r--r--components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl2
-rw-r--r--components/script/dom/webidls/WebGLTexture.webidl2
-rw-r--r--components/script/dom/webidls/WebGLUniformLocation.webidl2
-rw-r--r--components/script/dom/xrwebgllayer.rs12
16 files changed, 101 insertions, 41 deletions
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index 00f53fef782..f58acb028ee 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -26,6 +26,7 @@ use crate::dom::bindings::codegen::Bindings::HTMLCanvasElementBinding::{
};
use crate::dom::bindings::codegen::Bindings::MediaStreamBinding::MediaStreamMethods;
use crate::dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLContextAttributes;
+use crate::dom::bindings::codegen::UnionTypes::HTMLCanvasElementOrOffscreenCanvas;
use crate::dom::bindings::conversions::ConversionResult;
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
@@ -206,7 +207,9 @@ impl HTMLCanvasElement {
let window = window_from_node(self);
let size = self.get_size();
let attrs = Self::get_gl_attributes(cx, options)?;
- let context = WebGLRenderingContext::new(&window, self, WebGLVersion::WebGL1, size, attrs)?;
+ let canvas = HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(DomRoot::from_ref(self));
+ let context =
+ WebGLRenderingContext::new(&window, &canvas, WebGLVersion::WebGL1, size, attrs)?;
*self.context.borrow_mut() = Some(CanvasContext::WebGL(Dom::from_ref(&*context)));
Some(context)
}
@@ -229,7 +232,8 @@ impl HTMLCanvasElement {
let window = window_from_node(self);
let size = self.get_size();
let attrs = Self::get_gl_attributes(cx, options)?;
- let context = WebGL2RenderingContext::new(&window, self, size, attrs)?;
+ let canvas = HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(DomRoot::from_ref(self));
+ let context = WebGL2RenderingContext::new(&window, &canvas, size, attrs)?;
*self.context.borrow_mut() = Some(CanvasContext::WebGL2(Dom::from_ref(&*context)));
Some(context)
}
diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs
index eb608afe946..b2e7874567f 100644
--- a/components/script/dom/webgl2renderingcontext.rs
+++ b/components/script/dom/webgl2renderingcontext.rs
@@ -34,6 +34,7 @@ use crate::dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::{
};
use crate::dom::bindings::codegen::UnionTypes::{
ArrayBufferViewOrArrayBuffer, Float32ArrayOrUnrestrictedFloatSequence,
+ HTMLCanvasElementOrOffscreenCanvas,
ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement, Int32ArrayOrLongSequence,
Uint32ArrayOrUnsignedLongSequence,
};
@@ -42,7 +43,7 @@ use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot, LayoutDom, MutNullableDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::globalscope::GlobalScope;
-use crate::dom::htmlcanvaselement::{HTMLCanvasElement, LayoutCanvasRenderingContextHelpers};
+use crate::dom::htmlcanvaselement::LayoutCanvasRenderingContextHelpers;
use crate::dom::promise::Promise;
use crate::dom::webgl_validations::tex_image_2d::{
TexImage2DValidator, TexImage2DValidatorResult, TexStorageValidator, TexStorageValidatorResult,
@@ -139,7 +140,7 @@ struct ReadPixelsSizes {
impl WebGL2RenderingContext {
fn new_inherited(
window: &Window,
- canvas: &HTMLCanvasElement,
+ canvas: &HTMLCanvasElementOrOffscreenCanvas,
size: Size2D<u32>,
attrs: GLContextAttributes,
) -> Option<WebGL2RenderingContext> {
@@ -186,7 +187,7 @@ impl WebGL2RenderingContext {
#[allow(crown::unrooted_must_root)]
pub fn new(
window: &Window,
- canvas: &HTMLCanvasElement,
+ canvas: &HTMLCanvasElementOrOffscreenCanvas,
size: Size2D<u32>,
attrs: GLContextAttributes,
) -> Option<DomRoot<WebGL2RenderingContext>> {
@@ -902,7 +903,7 @@ impl WebGL2RenderingContext {
impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
/// <https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.1>
- fn Canvas(&self) -> DomRoot<HTMLCanvasElement> {
+ fn Canvas(&self) -> HTMLCanvasElementOrOffscreenCanvas {
self.base.Canvas()
}
diff --git a/components/script/dom/webglobject.rs b/components/script/dom/webglobject.rs
index fd6fe082c08..919bfc5cda7 100644
--- a/components/script/dom/webglobject.rs
+++ b/components/script/dom/webglobject.rs
@@ -5,14 +5,18 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl
use dom_struct::dom_struct;
+use crate::dom::bindings::cell::DomRefCell;
+use crate::dom::bindings::codegen::Bindings::WebGLObjectBinding::WebGLObjectMethods;
use crate::dom::bindings::reflector::Reflector;
use crate::dom::bindings::root::Dom;
+use crate::dom::bindings::str::USVString;
use crate::dom::webglrenderingcontext::WebGLRenderingContext;
#[dom_struct]
pub struct WebGLObject {
reflector_: Reflector,
context: Dom<WebGLRenderingContext>,
+ label: DomRefCell<USVString>,
}
impl WebGLObject {
@@ -20,6 +24,7 @@ impl WebGLObject {
WebGLObject {
reflector_: Reflector::new(),
context: Dom::from_ref(context),
+ label: DomRefCell::new(USVString::default()),
}
}
@@ -27,3 +32,15 @@ impl WebGLObject {
&self.context
}
}
+
+impl WebGLObjectMethods for WebGLObject {
+ /// <https://registry.khronos.org/webgl/specs/latest/1.0/#5.3>
+ fn Label(&self) -> USVString {
+ self.label.borrow().clone()
+ }
+
+ /// <https://registry.khronos.org/webgl/specs/latest/1.0/#5.3>
+ fn SetLabel(&self, value: USVString) {
+ *self.label.borrow_mut() = value;
+ }
+}
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 5af828fe628..19175cdeb5c 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -48,19 +48,18 @@ use crate::dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::{
WebGLRenderingContextMethods,
};
use crate::dom::bindings::codegen::UnionTypes::{
- ArrayBufferViewOrArrayBuffer, Float32ArrayOrUnrestrictedFloatSequence, Int32ArrayOrLongSequence,
+ ArrayBufferViewOrArrayBuffer, Float32ArrayOrUnrestrictedFloatSequence,
+ HTMLCanvasElementOrOffscreenCanvas, Int32ArrayOrLongSequence,
};
use crate::dom::bindings::conversions::{DerivedFrom, ToJSValConvertible};
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
-use crate::dom::bindings::root::{Dom, DomOnceCell, DomRoot, LayoutDom, MutNullableDom};
+use crate::dom::bindings::root::{DomOnceCell, DomRoot, LayoutDom, MutNullableDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::element::cors_setting_for_element;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
-use crate::dom::htmlcanvaselement::{
- utils as canvas_utils, HTMLCanvasElement, LayoutCanvasRenderingContextHelpers,
-};
+use crate::dom::htmlcanvaselement::{utils as canvas_utils, LayoutCanvasRenderingContextHelpers};
use crate::dom::node::{document_from_node, window_from_node, Node, NodeDamage};
use crate::dom::promise::Promise;
use crate::dom::vertexarrayobject::VertexAttribData;
@@ -182,7 +181,7 @@ pub struct WebGLRenderingContext {
#[ignore_malloc_size_of = "Defined in surfman"]
#[no_trace]
limits: GLLimits,
- canvas: Dom<HTMLCanvasElement>,
+ canvas: HTMLCanvasElementOrOffscreenCanvas,
#[ignore_malloc_size_of = "Defined in canvas_traits"]
#[no_trace]
last_error: Cell<Option<WebGLError>>,
@@ -218,7 +217,7 @@ pub struct WebGLRenderingContext {
impl WebGLRenderingContext {
pub fn new_inherited(
window: &Window,
- canvas: &HTMLCanvasElement,
+ canvas: &HTMLCanvasElementOrOffscreenCanvas,
webgl_version: WebGLVersion,
size: Size2D<u32>,
attrs: GLContextAttributes,
@@ -248,7 +247,7 @@ impl WebGLRenderingContext {
webgl_version,
glsl_version: ctx_data.glsl_version,
limits: ctx_data.limits,
- canvas: Dom::from_ref(canvas),
+ canvas: canvas.clone(),
last_error: Cell::new(None),
texture_packing_alignment: Cell::new(4),
texture_unpacking_settings: Cell::new(TextureUnpacking::CONVERT_COLORSPACE),
@@ -285,7 +284,7 @@ impl WebGLRenderingContext {
#[allow(crown::unrooted_must_root)]
pub fn new(
window: &Window,
- canvas: &HTMLCanvasElement,
+ canvas: &HTMLCanvasElementOrOffscreenCanvas,
webgl_version: WebGLVersion,
size: Size2D<u32>,
attrs: GLContextAttributes,
@@ -301,7 +300,14 @@ impl WebGLRenderingContext {
EventCancelable::Cancelable,
DOMString::from(msg),
);
- event.upcast::<Event>().fire(canvas.upcast());
+ match canvas {
+ HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(canvas) => {
+ event.upcast::<Event>().fire(canvas.upcast());
+ },
+ HTMLCanvasElementOrOffscreenCanvas::OffscreenCanvas(canvas) => {
+ event.upcast::<Event>().fire(canvas.upcast());
+ },
+ }
None
},
}
@@ -395,7 +401,12 @@ impl WebGLRenderingContext {
}
pub fn onscreen(&self) -> bool {
- self.canvas.upcast::<Node>().is_connected()
+ match self.canvas {
+ HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(ref canvas) => {
+ canvas.upcast::<Node>().is_connected()
+ },
+ HTMLCanvasElementOrOffscreenCanvas::OffscreenCanvas(_) => false,
+ }
}
#[inline]
@@ -535,12 +546,14 @@ impl WebGLRenderingContext {
return;
}
- self.canvas
- .upcast::<Node>()
- .dirty(NodeDamage::OtherNodeDamage);
-
- let document = document_from_node(&*self.canvas);
- document.add_dirty_webgl_canvas(self);
+ match self.canvas {
+ HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(ref canvas) => {
+ canvas.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
+ let document = document_from_node(&**canvas);
+ document.add_dirty_webgl_canvas(self);
+ },
+ HTMLCanvasElementOrOffscreenCanvas::OffscreenCanvas(_) => {},
+ }
}
fn vertex_attrib(&self, indx: u32, x: f32, y: f32, z: f32, w: f32) {
@@ -648,7 +661,15 @@ impl WebGLRenderingContext {
false,
),
TexImageSource::HTMLImageElement(image) => {
- let document = document_from_node(&*self.canvas);
+ let document = match self.canvas {
+ HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(ref canvas) => {
+ document_from_node(&**canvas)
+ },
+ HTMLCanvasElementOrOffscreenCanvas::OffscreenCanvas(ref canvas) => {
+ // TODO: Support retrieving image pixels here for OffscreenCanvas
+ return Ok(None);
+ },
+ };
if !image.same_origin(document.origin()) {
return Err(Error::Security);
}
@@ -658,7 +679,13 @@ impl WebGLRenderingContext {
None => return Ok(None),
};
- let window = window_from_node(&*self.canvas);
+ let window = match self.canvas {
+ HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(ref canvas) => {
+ window_from_node(&**canvas)
+ },
+ // This is marked as unreachable as we should have returned already
+ HTMLCanvasElementOrOffscreenCanvas::OffscreenCanvas(_) => unreachable!(),
+ };
let cors_setting = cors_setting_for_element(image.upcast());
let img =
@@ -1959,8 +1986,8 @@ impl Drop for WebGLRenderingContext {
impl WebGLRenderingContextMethods for WebGLRenderingContext {
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.1
- fn Canvas(&self) -> DomRoot<HTMLCanvasElement> {
- DomRoot::from_ref(&*self.canvas)
+ fn Canvas(&self) -> HTMLCanvasElementOrOffscreenCanvas {
+ self.canvas.clone()
}
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.11
diff --git a/components/script/dom/webidls/WebGLActiveInfo.webidl b/components/script/dom/webidls/WebGLActiveInfo.webidl
index 42e703db088..eedfd8c35b3 100644
--- a/components/script/dom/webidls/WebGLActiveInfo.webidl
+++ b/components/script/dom/webidls/WebGLActiveInfo.webidl
@@ -6,7 +6,7 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.7
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLActiveInfo {
readonly attribute GLint size;
readonly attribute GLenum type;
diff --git a/components/script/dom/webidls/WebGLBuffer.webidl b/components/script/dom/webidls/WebGLBuffer.webidl
index c182be1415d..a8ad5a103d2 100644
--- a/components/script/dom/webidls/WebGLBuffer.webidl
+++ b/components/script/dom/webidls/WebGLBuffer.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.4
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLBuffer : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLFramebuffer.webidl b/components/script/dom/webidls/WebGLFramebuffer.webidl
index b036b752161..e557542bfb0 100644
--- a/components/script/dom/webidls/WebGLFramebuffer.webidl
+++ b/components/script/dom/webidls/WebGLFramebuffer.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.7
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLFramebuffer : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLObject.webidl b/components/script/dom/webidls/WebGLObject.webidl
index 90feba0ab6a..6bfcf4d647b 100644
--- a/components/script/dom/webidls/WebGLObject.webidl
+++ b/components/script/dom/webidls/WebGLObject.webidl
@@ -6,6 +6,7 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.3
//
-[Abstract, Exposed=Window]
+[Abstract, Exposed=(Window,Worker)]
interface WebGLObject {
+ attribute USVString label;
};
diff --git a/components/script/dom/webidls/WebGLProgram.webidl b/components/script/dom/webidls/WebGLProgram.webidl
index 29125b57b84..1246b222acd 100644
--- a/components/script/dom/webidls/WebGLProgram.webidl
+++ b/components/script/dom/webidls/WebGLProgram.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.6
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLProgram : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLRenderbuffer.webidl b/components/script/dom/webidls/WebGLRenderbuffer.webidl
index 465f193aaac..91a437039fb 100644
--- a/components/script/dom/webidls/WebGLRenderbuffer.webidl
+++ b/components/script/dom/webidls/WebGLRenderbuffer.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.5
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLRenderbuffer : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl
index fcd3f9752ae..6938e547cce 100644
--- a/components/script/dom/webidls/WebGLRenderingContext.webidl
+++ b/components/script/dom/webidls/WebGLRenderingContext.webidl
@@ -43,7 +43,7 @@ dictionary WebGLContextAttributes {
GLboolean failIfMajorPerformanceCaveat = false;
};
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface mixin WebGLRenderingContextBase
{
@@ -465,7 +465,7 @@ interface mixin WebGLRenderingContextBase
const GLenum UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
const GLenum BROWSER_DEFAULT_WEBGL = 0x9244;
- readonly attribute HTMLCanvasElement canvas;
+ readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas;
readonly attribute GLsizei drawingBufferWidth;
readonly attribute GLsizei drawingBufferHeight;
@@ -680,7 +680,7 @@ interface mixin WebGLRenderingContextOverloads
undefined uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
};
-[Exposed=(Window)]
+[Exposed=(Window,Worker)]
interface WebGLRenderingContext
{
};
diff --git a/components/script/dom/webidls/WebGLShader.webidl b/components/script/dom/webidls/WebGLShader.webidl
index af5f375dd99..4a0fe299a52 100644
--- a/components/script/dom/webidls/WebGLShader.webidl
+++ b/components/script/dom/webidls/WebGLShader.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.8
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLShader : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl b/components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl
index 10fed47b558..e2ed4821d11 100644
--- a/components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl
+++ b/components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl
@@ -6,7 +6,7 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.7
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLShaderPrecisionFormat {
readonly attribute GLint rangeMin;
readonly attribute GLint rangeMax;
diff --git a/components/script/dom/webidls/WebGLTexture.webidl b/components/script/dom/webidls/WebGLTexture.webidl
index 384cea6644a..4afad31fde7 100644
--- a/components/script/dom/webidls/WebGLTexture.webidl
+++ b/components/script/dom/webidls/WebGLTexture.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/#5.9
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLTexture : WebGLObject {
};
diff --git a/components/script/dom/webidls/WebGLUniformLocation.webidl b/components/script/dom/webidls/WebGLUniformLocation.webidl
index 4cf09e42da4..3db0333177c 100644
--- a/components/script/dom/webidls/WebGLUniformLocation.webidl
+++ b/components/script/dom/webidls/WebGLUniformLocation.webidl
@@ -6,6 +6,6 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.10
//
-[Exposed=Window]
+[Exposed=(Window,Worker)]
interface WebGLUniformLocation {
};
diff --git a/components/script/dom/xrwebgllayer.rs b/components/script/dom/xrwebgllayer.rs
index 28048f4cf77..bced737a045 100644
--- a/components/script/dom/xrwebgllayer.rs
+++ b/components/script/dom/xrwebgllayer.rs
@@ -15,6 +15,7 @@ use crate::dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGL
use crate::dom::bindings::codegen::Bindings::XRWebGLLayerBinding::{
XRWebGLLayerInit, XRWebGLLayerMethods, XRWebGLRenderingContext,
};
+use crate::dom::bindings::codegen::UnionTypes::HTMLCanvasElementOrOffscreenCanvas;
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
@@ -189,7 +190,16 @@ impl XRWebGLLayer {
size.1.try_into().unwrap_or(0),
)
} else {
- let size = self.context().Canvas().get_size();
+ let size = match self.context().Canvas() {
+ HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(canvas) => canvas.get_size(),
+ HTMLCanvasElementOrOffscreenCanvas::OffscreenCanvas(canvas) => {
+ let size = canvas.get_size();
+ Size2D::new(
+ size.width.try_into().unwrap_or(0),
+ size.height.try_into().unwrap_or(0),
+ )
+ },
+ };
Size2D::from_untyped(size)
}
}