aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/webglrenderingcontext.rs38
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())
}