aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <me@emiliocobos.me>2016-04-20 19:21:47 +0200
committerEmilio Cobos Álvarez <me@emiliocobos.me>2016-04-20 19:22:05 +0200
commit1ad7f73caf3965621238cceebb19fe3a8203ed8f (patch)
treea6626244f8a2f0bbac91d560d1601728732f2cca /components/script/dom/webglrenderingcontext.rs
parentbc0876241406891690e6bbfef4bd8b58493a17f0 (diff)
downloadservo-1ad7f73caf3965621238cceebb19fe3a8203ed8f.tar.gz
servo-1ad7f73caf3965621238cceebb19fe3a8203ed8f.zip
webgl: Reset bound buffer when appropiate in BufferData
This makes the test bufferDataBadArgs pass appropiately.
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r--components/script/dom/webglrenderingcontext.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 67f7377a1d5..551a1874b0c 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -213,8 +213,8 @@ impl WebGLRenderingContext {
// properly validate that the uniform type is compatible with the
// uniform type, and that the uniform size matches.
if data.len() % uniform_type.element_count() != 0 {
- self.webgl_error(InvalidOperation);
- return false;
+ self.webgl_error(InvalidOperation);
+ return false;
}
true
@@ -616,6 +616,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
Err(e) => return self.webgl_error(e),
}
} else {
+ slot.set(None);
// Unbind the current buffer
self.ipc_renderer
.send(CanvasMsg::WebGL(WebGLCommand::BindBuffer(target, 0)))
@@ -698,20 +699,24 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(),
_ => return self.webgl_error(InvalidEnum),
};
+
let bound_buffer = match bound_buffer {
Some(bound_buffer) => bound_buffer,
None => return self.webgl_error(InvalidValue),
};
+
match usage {
constants::STREAM_DRAW |
constants::STATIC_DRAW |
constants::DYNAMIC_DRAW => (),
_ => return self.webgl_error(InvalidEnum),
}
+
let data = match data {
Some(data) => data,
None => return self.webgl_error(InvalidValue),
};
+
if let Some(data_vec) = array_buffer_view_to_vec::<u8>(data) {
handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data_vec, usage));
} else {