diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/webgl2renderingcontext.rs | 6 | ||||
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 31 | ||||
-rw-r--r-- | components/script/dom/webidls/WebGLRenderingContext.webidl | 2 |
3 files changed, 38 insertions, 1 deletions
diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs index 9bf016f9631..2a25c450b08 100644 --- a/components/script/dom/webgl2renderingcontext.rs +++ b/components/script/dom/webgl2renderingcontext.rs @@ -115,6 +115,12 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext { self.base.GetParameter(cx, parameter) } + #[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 { + self.base.GetTexParameter(cx, target, pname) + } + /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 fn GetError(&self) -> u32 { self.base.GetError() diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 61f05a923e8..fa1015582cf 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -1336,6 +1336,37 @@ 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 { + constants::TEXTURE_2D | + constants::TEXTURE_CUBE_MAP => self.bound_texture(target), + _ => { + self.webgl_error(InvalidEnum); + return 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() + } + } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 fn GetError(&self) -> u32 { let error_code = if let Some(error) = self.last_error.get() { diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index ec729d1b5fb..3f845126701 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -600,7 +600,7 @@ interface WebGLRenderingContextBase DOMString? getShaderSource(WebGLShader? shader); - //any getTexParameter(GLenum target, GLenum pname); + any getTexParameter(GLenum target, GLenum pname); //any getUniform(WebGLProgram? program, WebGLUniformLocation? location); |