mirror of
https://github.com/servo/servo.git
synced 2025-08-02 20:20:14 +01:00
Implement missing checks in WebGLRenderingContext::GetBufferParameter
This commit is contained in:
parent
3525100a5f
commit
2befe47384
3 changed files with 144 additions and 12 deletions
|
@ -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())
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue