aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2018-04-04 12:44:50 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2018-04-04 13:12:40 +0200
commit235a7b80c980dda8017beeb72c3a9709dbf8ce8b (patch)
treeb5195dee4cbdf88a7e76caf1ebf33d62a1656fea /components/script/dom/webglrenderingcontext.rs
parent605da950766f1fbe9200b5780b3b58296daaa50a (diff)
downloadservo-235a7b80c980dda8017beeb72c3a9709dbf8ce8b.tar.gz
servo-235a7b80c980dda8017beeb72c3a9709dbf8ce8b.zip
Introduce WebGLRenderingContext::bound_buffer
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r--components/script/dom/webglrenderingcontext.rs46
1 files changed, 17 insertions, 29 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index e40134e0310..94e4e2b9d38 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -4,8 +4,9 @@
use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
use canvas_traits::canvas::{byte_swap, multiply_u8_pixel};
-use canvas_traits::webgl::{WebGLContextShareMode, WebGLCommand, WebGLError, WebGLVersion, WebGLSLVersion};
-use canvas_traits::webgl::{WebGLFramebufferBindingRequest, WebGLMsg, WebGLMsgSender, WebGLParameter, WebVRCommand};
+use canvas_traits::webgl::{WebGLCommand, WebGLContextShareMode, WebGLError};
+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::WebGLError::*;
use canvas_traits::webgl::webgl_channel;
@@ -1195,6 +1196,14 @@ impl WebGLRenderingContext {
));
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 {
@@ -1256,14 +1265,8 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
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();
- }
- };
+ let buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return NullValue());
+
match parameter {
constants::BUFFER_SIZE | constants::BUFFER_USAGE => {},
_ => {
@@ -1693,15 +1696,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
Err(_) => fallible_array_buffer_view_to_vec(cx, data)?,
};
- let bound_buffer = match target {
- 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 = handle_potential_webgl_error!(self, self.bound_buffer(target), return Ok(()));
let bound_buffer = match 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));
@@ -1710,12 +1708,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5
fn BufferData_(&self, target: u32, size: i64, usage: u32) -> ErrorResult {
- let bound_buffer = match target {
- 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 = handle_potential_webgl_error!(self, self.bound_buffer(target), return Ok(()));
let bound_buffer = match bound_buffer {
Some(bound_buffer) => bound_buffer,
None => return Ok(self.webgl_error(InvalidValue)),
@@ -1742,12 +1735,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
None => return self.webgl_error(InvalidValue),
};
- let bound_buffer = match target {
- 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 = handle_potential_webgl_error!(self, self.bound_buffer(target), return);
let bound_buffer = match bound_buffer {
Some(bound_buffer) => bound_buffer,
None => return self.webgl_error(InvalidOperation),