From 1c89ac90b9dd6e4a296e3fcfd71b4995910a96eb Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Thu, 15 Nov 2018 10:39:01 +0100 Subject: [PATCH] Send alignment info directly in TexImage2D and TexSubImage2d messages --- components/canvas/webgl_thread.rs | 6 +++++ components/canvas_traits/webgl.rs | 2 ++ .../script/dom/webglrenderingcontext.rs | 22 ++----------------- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs index c1839e19e32..e8af815f976 100644 --- a/components/canvas/webgl_thread.rs +++ b/components/canvas/webgl_thread.rs @@ -1050,8 +1050,11 @@ impl WebGLImpl { height, format, data_type, + unpacking_alignment, ref receiver, } => { + ctx.gl() + .pixel_store_i(gl::UNPACK_ALIGNMENT, unpacking_alignment as i32); ctx.gl().tex_image_2d( target, level as i32, @@ -1073,8 +1076,11 @@ impl WebGLImpl { height, format, data_type, + unpacking_alignment, ref receiver, } => { + ctx.gl() + .pixel_store_i(gl::UNPACK_ALIGNMENT, unpacking_alignment as i32); ctx.gl().tex_sub_image_2d( target, level as i32, diff --git a/components/canvas_traits/webgl.rs b/components/canvas_traits/webgl.rs index ae12c9410e1..7b8bc8103a2 100644 --- a/components/canvas_traits/webgl.rs +++ b/components/canvas_traits/webgl.rs @@ -280,6 +280,7 @@ pub enum WebGLCommand { height: u32, format: u32, data_type: u32, + unpacking_alignment: u32, receiver: IpcBytesReceiver, }, TexSubImage2D { @@ -291,6 +292,7 @@ pub enum WebGLCommand { height: u32, format: u32, data_type: u32, + unpacking_alignment: u32, receiver: IpcBytesReceiver, }, DrawingBufferWidth(WebGLSender), diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 36ce05256d6..42c03b735dc 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -721,16 +721,6 @@ impl WebGLRenderingContext { ) ); - // Set the unpack alignment. For textures coming from arrays, - // this will be the current value of the context's - // GL_UNPACK_ALIGNMENT, while for textures from images or - // canvas (produced by rgba8_image_to_tex_image_data()), it - // will be 1. - self.send_command(WebGLCommand::PixelStorei( - constants::UNPACK_ALIGNMENT, - unpacking_alignment as i32, - )); - let format = internal_format.as_gl_constant(); let data_type = data_type.as_gl_constant(); let internal_format = self @@ -747,6 +737,7 @@ impl WebGLRenderingContext { height, format, data_type: self.extension_manager.effective_type(data_type), + unpacking_alignment, receiver, }); sender.send(&pixels).unwrap(); @@ -805,16 +796,6 @@ impl WebGLRenderingContext { return self.webgl_error(InvalidOperation); } - // Set the unpack alignment. For textures coming from arrays, - // this will be the current value of the context's - // GL_UNPACK_ALIGNMENT, while for textures from images or - // canvas (produced by rgba8_image_to_tex_image_data()), it - // will be 1. - self.send_command(WebGLCommand::PixelStorei( - constants::UNPACK_ALIGNMENT, - unpacking_alignment as i32, - )); - // TODO(emilio): convert colorspace if requested let (sender, receiver) = ipc::bytes_channel().unwrap(); self.send_command(WebGLCommand::TexSubImage2D { @@ -828,6 +809,7 @@ impl WebGLRenderingContext { data_type: self .extension_manager .effective_type(data_type.as_gl_constant()), + unpacking_alignment, receiver, }); sender.send(&pixels).unwrap();