Cache BUFFER_USAGE value on the DOM side

This commit is contained in:
Anthony Ramine 2018-04-04 15:26:08 +02:00
parent e06f0d32d0
commit ae286a518d
4 changed files with 16 additions and 31 deletions

View file

@ -1250,30 +1250,20 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
target: u32,
parameter: u32,
) -> JSVal {
let buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return NullValue());
let buffer = handle_potential_webgl_error!(
self,
self.bound_buffer(target).and_then(|buf| buf.ok_or(InvalidOperation)),
return NullValue()
);
match parameter {
constants::BUFFER_SIZE | constants::BUFFER_USAGE => {},
constants::BUFFER_SIZE => Int32Value(buffer.capacity() as i32),
constants::BUFFER_USAGE => Int32Value(buffer.usage() as i32),
_ => {
self.webgl_error(InvalidEnum);
return NullValue();
NullValue()
}
}
let buffer = match buffer {
Some(buffer) => buffer,
None => {
self.webgl_error(InvalidOperation);
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())
}
#[allow(unsafe_code)]