Introduce WebGLRenderingContext::bound_buffer

This commit is contained in:
Anthony Ramine 2018-04-04 12:44:50 +02:00
parent 605da95076
commit 235a7b80c9

View file

@ -4,8 +4,9 @@
use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
use canvas_traits::canvas::{byte_swap, multiply_u8_pixel}; use canvas_traits::canvas::{byte_swap, multiply_u8_pixel};
use canvas_traits::webgl::{WebGLContextShareMode, WebGLCommand, WebGLError, WebGLVersion, WebGLSLVersion}; use canvas_traits::webgl::{WebGLCommand, WebGLContextShareMode, WebGLError};
use canvas_traits::webgl::{WebGLFramebufferBindingRequest, WebGLMsg, WebGLMsgSender, WebGLParameter, WebVRCommand}; use canvas_traits::webgl::{WebGLFramebufferBindingRequest, WebGLMsg, WebGLMsgSender};
use canvas_traits::webgl::{WebGLParameter, WebGLResult, WebGLSLVersion, WebGLVersion, WebVRCommand};
use canvas_traits::webgl::DOMToTextureCommand; use canvas_traits::webgl::DOMToTextureCommand;
use canvas_traits::webgl::WebGLError::*; use canvas_traits::webgl::WebGLError::*;
use canvas_traits::webgl::webgl_channel; use canvas_traits::webgl::webgl_channel;
@ -1195,6 +1196,14 @@ impl WebGLRenderingContext {
)); ));
Some(receiver.recv().unwrap().into()) Some(receiver.recv().unwrap().into())
} }
pub fn bound_buffer(&self, target: u32) -> WebGLResult<Option<DomRoot<WebGLBuffer>>> {
match target {
constants::ARRAY_BUFFER => Ok(self.bound_buffer_array.get()),
constants::ELEMENT_ARRAY_BUFFER => Ok(self.bound_buffer_element_array.get()),
_ => Err(WebGLError::InvalidEnum),
}
}
} }
impl Drop for WebGLRenderingContext { impl Drop for WebGLRenderingContext {
@ -1256,14 +1265,8 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
target: u32, target: u32,
parameter: u32, parameter: u32,
) -> JSVal { ) -> JSVal {
let buffer = match target { let buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return NullValue());
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 { match parameter {
constants::BUFFER_SIZE | constants::BUFFER_USAGE => {}, constants::BUFFER_SIZE | constants::BUFFER_USAGE => {},
_ => { _ => {
@ -1693,15 +1696,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
Err(_) => fallible_array_buffer_view_to_vec(cx, data)?, Err(_) => fallible_array_buffer_view_to_vec(cx, data)?,
}; };
let bound_buffer = match target { let bound_buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return Ok(()));
constants::ARRAY_BUFFER => self.bound_buffer_array.get(),
constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(),
_ => return Ok(self.webgl_error(InvalidEnum)),
};
let bound_buffer = match bound_buffer { let bound_buffer = match bound_buffer {
Some(bound_buffer) => bound_buffer, Some(bound_buffer) => bound_buffer,
None => return Ok(self.webgl_error(InvalidValue)), None => return Ok(self.webgl_error(InvalidOperation)),
}; };
handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, data_vec, usage)); handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, data_vec, usage));
@ -1710,12 +1708,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5
fn BufferData_(&self, target: u32, size: i64, usage: u32) -> ErrorResult { fn BufferData_(&self, target: u32, size: i64, usage: u32) -> ErrorResult {
let bound_buffer = match target { let bound_buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return Ok(()));
constants::ARRAY_BUFFER => self.bound_buffer_array.get(),
constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(),
_ => return Ok(self.webgl_error(InvalidEnum)),
};
let bound_buffer = match bound_buffer { let bound_buffer = match bound_buffer {
Some(bound_buffer) => bound_buffer, Some(bound_buffer) => bound_buffer,
None => return Ok(self.webgl_error(InvalidValue)), None => return Ok(self.webgl_error(InvalidValue)),
@ -1742,12 +1735,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
None => return self.webgl_error(InvalidValue), None => return self.webgl_error(InvalidValue),
}; };
let bound_buffer = match target { let bound_buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return);
constants::ARRAY_BUFFER => self.bound_buffer_array.get(),
constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(),
_ => return self.webgl_error(InvalidEnum),
};
let bound_buffer = match bound_buffer { let bound_buffer = match bound_buffer {
Some(bound_buffer) => bound_buffer, Some(bound_buffer) => bound_buffer,
None => return self.webgl_error(InvalidOperation), None => return self.webgl_error(InvalidOperation),