Implement missing checks in WebGLRenderingContext::GetBufferParameter

This commit is contained in:
Anthony Ramine 2018-03-24 11:43:24 +01:00
parent 3525100a5f
commit 2befe47384
3 changed files with 144 additions and 12 deletions

View file

@ -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())
}