diff options
author | Istvan Miklos <istvan.miklos@h-lab.eu> | 2020-05-18 13:30:39 +0200 |
---|---|---|
committer | Istvan Miklos <istvan.miklos@h-lab.eu> | 2020-05-26 11:33:58 +0200 |
commit | b298160ff28182d8e894e436429d86b459e3e0a4 (patch) | |
tree | 1639d3b48df023f023e4203e147ebda348cd11e3 /components/script/dom/webgl2renderingcontext.rs | |
parent | ce076a8382a81675cb93c56e0bdc8d1be60eaf15 (diff) | |
download | servo-b298160ff28182d8e894e436429d86b459e3e0a4.tar.gz servo-b298160ff28182d8e894e436429d86b459e3e0a4.zip |
Add support for WebGL2 TexImage2D
Adds initial support for one of the WebGL2 `TexImage2D` call.
Diffstat (limited to 'components/script/dom/webgl2renderingcontext.rs')
-rw-r--r-- | components/script/dom/webgl2renderingcontext.rs | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs index 7dd7ddd0279..41d3cd5b66c 100644 --- a/components/script/dom/webgl2renderingcontext.rs +++ b/components/script/dom/webgl2renderingcontext.rs @@ -2917,7 +2917,6 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext { } /// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.6 - #[allow(unsafe_code)] fn TexImage2D__( &self, target: u32, @@ -2928,6 +2927,73 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext { border: i32, format: u32, type_: u32, + source: ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement, + ) -> Fallible<()> { + if self.bound_pixel_unpack_buffer.get().is_some() { + return Ok(self.base.webgl_error(InvalidOperation)); + } + + let validator = TexImage2DValidator::new( + &self.base, + target, + level, + internalformat as u32, + width, + height, + border, + format, + type_, + ); + + let TexImage2DValidatorResult { + texture, + target, + width: _, + height: _, + level, + border, + internal_format, + format, + data_type, + } = match validator.validate() { + Ok(result) => result, + Err(_) => return Ok(()), + }; + + let unpacking_alignment = self.base.texture_unpacking_alignment(); + + let pixels = match self.base.get_image_pixels(source)? { + Some(pixels) => pixels, + None => return Ok(()), + }; + + self.base.tex_image_2d( + &texture, + target, + data_type, + internal_format, + format, + level, + border, + unpacking_alignment, + pixels, + ); + + Ok(()) + } + + /// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.6 + #[allow(unsafe_code)] + fn TexImage2D___( + &self, + target: u32, + level: i32, + internalformat: i32, + width: i32, + height: i32, + border: i32, + format: u32, + type_: u32, src_data: CustomAutoRooterGuard<ArrayBufferView>, src_offset: u32, ) -> Fallible<()> { |