diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-03-06 09:48:56 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-06 09:48:56 -0500 |
commit | f5037cf6219cafbc86bfaf6483b81b4ffb3496fa (patch) | |
tree | 22d5cbf1464bac93e3f5221d0dadabbb9e1d2036 /components/script | |
parent | 226d9a5b0e69185b95c62e79b81044beba477654 (diff) | |
parent | 288ef50fb79aaab771b93e4e06d077656500ebb9 (diff) | |
download | servo-f5037cf6219cafbc86bfaf6483b81b4ffb3496fa.tar.gz servo-f5037cf6219cafbc86bfaf6483b81b4ffb3496fa.zip |
Auto merge of #20144 - mkollaro:gettexparameter, r=jdm
Add WebGL function glGetTexParameter
<!-- Please describe your changes on the following line: -->
Add WebGL function glGetTexParameter
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix part of #10209
<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/20144)
<!-- Reviewable:end -->
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); |