From 431e3ddf8dfb68e2c5449f2f7cf49aa83be289a8 Mon Sep 17 00:00:00 2001 From: Igor Gutorov Date: Tue, 20 Mar 2018 21:00:46 +0200 Subject: [PATCH] Simplify GetTexParameter --- components/canvas/webgl_thread.rs | 17 +------ components/canvas_traits/webgl.rs | 2 +- .../script/dom/webglrenderingcontext.rs | 50 +++++++++++-------- 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs index bfb6c7ab5cb..e4d807b01d6 100644 --- a/components/canvas/webgl_thread.rs +++ b/components/canvas/webgl_thread.rs @@ -1066,21 +1066,8 @@ impl WebGLImpl { fn get_tex_parameter(gl: &gl::Gl, target: u32, pname: u32, - chan: WebGLSender> ) { - let result = match pname { - gl::TEXTURE_MAG_FILTER | - gl::TEXTURE_MIN_FILTER | - gl::TEXTURE_WRAP_S | - gl::TEXTURE_WRAP_T => { - let parameter = gl.get_tex_parameter_iv(target, pname); - if parameter == 0 { - Ok(WebGLParameter::Invalid) - } else { - Ok(WebGLParameter::Int(parameter)) - } - } - _ => Err(WebGLError::InvalidEnum) - }; + chan: WebGLSender ) { + let result = gl.get_tex_parameter_iv(target, pname); chan.send(result).unwrap(); } diff --git a/components/canvas_traits/webgl.rs b/components/canvas_traits/webgl.rs index 70aeb40ab06..ac0e5a17b99 100644 --- a/components/canvas_traits/webgl.rs +++ b/components/canvas_traits/webgl.rs @@ -207,7 +207,7 @@ pub enum WebGLCommand { GetBufferParameter(u32, u32, WebGLSender>), GetExtensions(WebGLSender), GetParameter(u32, WebGLSender>), - GetTexParameter(u32, u32, WebGLSender>), + GetTexParameter(u32, u32, WebGLSender), GetProgramParameter(WebGLProgramId, u32, WebGLSender>), GetShaderParameter(WebGLShaderId, u32, WebGLSender>), GetShaderPrecisionFormat(u32, u32, WebGLSender>), diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 0145d84ffd8..c6443ecfd29 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -1342,31 +1342,39 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 unsafe fn GetTexParameter(&self, _cx: *mut JSContext, target: u32, pname: u32) -> JSVal { - let texture = match target { + let target_matches = match target { constants::TEXTURE_2D | - constants::TEXTURE_CUBE_MAP => self.bound_texture(target), + constants::TEXTURE_CUBE_MAP => true, + _ => false, + }; + + let pname_matches = match pname { + constants::TEXTURE_MAG_FILTER | + constants::TEXTURE_MIN_FILTER | + constants::TEXTURE_WRAP_S | + constants::TEXTURE_WRAP_T => true, + _ => false, + }; + + if !target_matches || !pname_matches { + self.webgl_error(InvalidEnum); + return NullValue(); + } + + if self.bound_texture(target).is_none() { + self.webgl_error(InvalidOperation); + return NullValue(); + } + + let (sender, receiver) = webgl_channel().unwrap(); + self.send_command(WebGLCommand::GetTexParameter(target, pname, sender)); + + match receiver.recv().unwrap() { + value if value != 0 => Int32Value(value), _ => { self.webgl_error(InvalidEnum); - return NullValue(); + NullValue() } - }; - if texture.is_some() { - let (sender, receiver) = webgl_channel().unwrap(); - self.send_command(WebGLCommand::GetTexParameter(target, pname, sender)); - match handle_potential_webgl_error!(self, receiver.recv().unwrap(), WebGLParameter::Invalid) { - WebGLParameter::Int(val) => Int32Value(val), - WebGLParameter::Bool(_) => panic!("Texture parameter should not be bool"), - WebGLParameter::Float(_) => panic!("Texture parameter should not be float"), - WebGLParameter::FloatArray(_) => panic!("Texture parameter should not be float array"), - WebGLParameter::String(_) => panic!("Texture parameter should not be string"), - WebGLParameter::Invalid => { - self.webgl_error(InvalidEnum); - NullValue() - } - } - } else { - self.webgl_error(InvalidOperation); - NullValue() } }