diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2018-11-15 15:49:29 +0100 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2018-11-16 12:43:19 +0100 |
commit | af2b4dbc21596b662dcb8c428943422bc0838f4d (patch) | |
tree | fa845766ae802cbbba83d5660f1ab76c5c96ae35 /components/script/dom/webglrenderingcontext.rs | |
parent | 947e5afa0c5dd374a59b452655c848754dbe2aac (diff) | |
download | servo-af2b4dbc21596b662dcb8c428943422bc0838f4d.tar.gz servo-af2b4dbc21596b662dcb8c428943422bc0838f4d.zip |
Pass a TexPixels value to tex_image_2d and tex_sub_image_2d
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 91 |
1 files changed, 39 insertions, 52 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 8a96fe1dcca..a21d3898112 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -494,19 +494,19 @@ impl WebGLRenderingContext { rgba8[3] = 255u8; } + // TODO(nox): AFAICT here we construct a RGBA8 array and then we + // convert it to whatever actual format we need, we should probably + // construct the desired format from the start. self.tex_image_2d( texture, target, data_type, format, level, - size.width, - size.height, 0, 1, - true, TexSource::FromHtmlElement, - pixels, + TexPixels::new(pixels, size, true), ); false @@ -642,8 +642,7 @@ impl WebGLRenderingContext { &self, internal_format: TexFormat, data_type: TexDataType, - width: u32, - height: u32, + size: Size2D<u32>, unpacking_alignment: u32, alpha_treatment: Option<AlphaTreatment>, y_axis_treatment: YAxisTreatment, @@ -678,8 +677,8 @@ impl WebGLRenderingContext { pixels = webgl::flip_pixels_y( internal_format, data_type, - width as usize, - height as usize, + size.width as usize, + size.height as usize, unpacking_alignment as usize, pixels, ); @@ -695,18 +694,15 @@ impl WebGLRenderingContext { data_type: TexDataType, internal_format: TexFormat, level: u32, - width: u32, - height: u32, _border: u32, unpacking_alignment: u32, - source_premultiplied: bool, tex_source: TexSource, - pixels: Vec<u8>, + pixels: TexPixels, ) { let settings = self.texture_unpacking_settings.get(); let dest_premultiplied = settings.contains(TextureUnpacking::PREMULTIPLY_ALPHA); - let alpha_treatment = match (source_premultiplied, dest_premultiplied) { + let alpha_treatment = match (pixels.premultiplied, dest_premultiplied) { (true, false) => Some(AlphaTreatment::Unmultiply), (false, true) => Some(AlphaTreatment::Premultiply), _ => None, @@ -718,16 +714,15 @@ impl WebGLRenderingContext { YAxisTreatment::AsIs }; - let pixels = self.prepare_pixels( + let buff = self.prepare_pixels( internal_format, data_type, - width, - height, + pixels.size, unpacking_alignment, alpha_treatment, y_axis_treatment, tex_source, - pixels, + pixels.data, ); // TexImage2D depth is always equal to 1 @@ -735,8 +730,8 @@ impl WebGLRenderingContext { self, texture.initialize( target, - width, - height, + pixels.size.width, + pixels.size.height, 1, internal_format, level, @@ -756,14 +751,14 @@ impl WebGLRenderingContext { target: target.as_gl_constant(), level, internal_format, - width, - height, + width: pixels.size.width, + height: pixels.size.height, format, data_type: self.extension_manager.effective_type(data_type), unpacking_alignment, receiver, }); - sender.send(&pixels).unwrap(); + sender.send(&buff).unwrap(); if let Some(fb) = self.bound_framebuffer.get() { fb.invalidate_texture(&*texture); @@ -777,19 +772,16 @@ impl WebGLRenderingContext { level: u32, xoffset: i32, yoffset: i32, - width: u32, - height: u32, format: TexFormat, data_type: TexDataType, unpacking_alignment: u32, - source_premultiplied: bool, tex_source: TexSource, - pixels: Vec<u8>, + pixels: TexPixels, ) { let settings = self.texture_unpacking_settings.get(); let alpha_treatment = match ( - source_premultiplied, + pixels.premultiplied, settings.contains(TextureUnpacking::PREMULTIPLY_ALPHA), ) { (true, false) => Some(AlphaTreatment::Unmultiply), @@ -803,16 +795,15 @@ impl WebGLRenderingContext { YAxisTreatment::AsIs }; - let pixels = self.prepare_pixels( + let buff = self.prepare_pixels( format, data_type, - width, - height, + pixels.size, unpacking_alignment, alpha_treatment, y_axis_treatment, tex_source, - pixels, + pixels.data, ); // We have already validated level @@ -823,9 +814,9 @@ impl WebGLRenderingContext { // - x offset plus the width is greater than the texture width // - y offset plus the height is greater than the texture height if xoffset < 0 || - (xoffset as u32 + width) > image_info.width() || + (xoffset as u32 + pixels.size.width) > image_info.width() || yoffset < 0 || - (yoffset as u32 + height) > image_info.height() + (yoffset as u32 + pixels.size.height) > image_info.height() { return self.webgl_error(InvalidValue); } @@ -844,8 +835,8 @@ impl WebGLRenderingContext { level, xoffset, yoffset, - width, - height, + width: pixels.size.width, + height: pixels.size.height, format: format.as_gl_constant(), data_type: self .extension_manager @@ -853,7 +844,7 @@ impl WebGLRenderingContext { unpacking_alignment, receiver, }); - sender.send(&pixels).unwrap(); + sender.send(&buff).unwrap(); } fn get_gl_extensions(&self) -> String { @@ -3713,13 +3704,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { data_type, format, level, - width, - height, border, unpacking_alignment, - false, TexSource::FromArray, - buff, + TexPixels::from_array(buff, Size2D::new(width, height)), ); Ok(()) @@ -3788,13 +3776,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { data_type, format, level, - pixels.size.width, - pixels.size.height, border, 1, - pixels.premultiplied, TexSource::FromHtmlElement, - pixels.data, + pixels, ); Ok(()) } @@ -3923,14 +3908,11 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { level, xoffset, yoffset, - width, - height, format, data_type, unpacking_alignment, - false, TexSource::FromArray, - buff, + TexPixels::from_array(buff, Size2D::new(width, height)), ); Ok(()) } @@ -3980,14 +3962,11 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { level, xoffset, yoffset, - pixels.size.width, - pixels.size.height, format, data_type, 1, - pixels.premultiplied, TexSource::FromHtmlElement, - pixels.data, + pixels, ); Ok(()) } @@ -4283,4 +4262,12 @@ impl TexPixels { premultiplied, } } + + fn from_array(data: Vec<u8>, size: Size2D<u32>) -> Self { + Self { + data, + size, + premultiplied: false, + } + } } |