diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 204426f8063..a3a6764996c 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -1237,21 +1237,41 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5 - unsafe fn GetBufferParameter(&self, _cx: *mut JSContext, target: u32, parameter: u32) -> JSVal { - let parameter_matches = match parameter { - constants::BUFFER_SIZE | - constants::BUFFER_USAGE => true, - _ => false, + unsafe fn GetBufferParameter( + &self, + _cx: *mut JSContext, + target: u32, + parameter: u32, + ) -> JSVal { + let buffer = match target { + constants::ARRAY_BUFFER => self.bound_buffer_array.get(), + constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(), + _ => { + self.webgl_error(InvalidEnum); + return NullValue(); + } + }; + match parameter { + constants::BUFFER_SIZE | constants::BUFFER_USAGE => {}, + _ => { + self.webgl_error(InvalidEnum); + return NullValue(); + } + } + let buffer = match buffer { + Some(buffer) => buffer, + None => { + self.webgl_error(InvalidOperation); + return NullValue(); + } }; - if !parameter_matches { - self.webgl_error(InvalidEnum); - return NullValue(); + if parameter == constants::BUFFER_SIZE { + return Int32Value(buffer.capacity() as i32); } let (sender, receiver) = webgl_channel().unwrap(); self.send_command(WebGLCommand::GetBufferParameter(target, parameter, sender)); - Int32Value(receiver.recv().unwrap()) } |