aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webgl2renderingcontext.rs
diff options
context:
space:
mode:
authorIstvan Miklos <istvan.miklos@h-lab.eu>2020-05-18 13:30:39 +0200
committerIstvan Miklos <istvan.miklos@h-lab.eu>2020-05-26 11:33:58 +0200
commitb298160ff28182d8e894e436429d86b459e3e0a4 (patch)
tree1639d3b48df023f023e4203e147ebda348cd11e3 /components/script/dom/webgl2renderingcontext.rs
parentce076a8382a81675cb93c56e0bdc8d1be60eaf15 (diff)
downloadservo-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.rs68
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<()> {