aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webgl_extensions
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2018-06-20 10:19:38 -0400
committerGitHub <noreply@github.com>2018-06-20 10:19:38 -0400
commit8f84f893a7444cb28405774613f4eb4c82a0d076 (patch)
tree5e9cfc147054d9e8ed4379727ee3e776af4ff425 /components/script/dom/webgl_extensions
parent132bf17e871c09180d6df425478b55950e3d3324 (diff)
parentfc3dd7cefc70be746c6daea3dc74c83c89a07cee (diff)
downloadservo-8f84f893a7444cb28405774613f4eb4c82a0d076.tar.gz
servo-8f84f893a7444cb28405774613f4eb4c82a0d076.zip
Auto merge of #21072 - servo:webgl, r=emilio
Implement checks for vertex attribs enabled as arrays without a bound buffer <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21072) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/webgl_extensions')
-rw-r--r--components/script/dom/webgl_extensions/ext/oesvertexarrayobject.rs24
1 files changed, 12 insertions, 12 deletions
diff --git a/components/script/dom/webgl_extensions/ext/oesvertexarrayobject.rs b/components/script/dom/webgl_extensions/ext/oesvertexarrayobject.rs
index f80cd7385e7..a6e8739862e 100644
--- a/components/script/dom/webgl_extensions/ext/oesvertexarrayobject.rs
+++ b/components/script/dom/webgl_extensions/ext/oesvertexarrayobject.rs
@@ -13,7 +13,6 @@ use dom_struct::dom_struct;
use js::conversions::ToJSValConvertible;
use js::jsapi::JSContext;
use js::jsval::{JSVal, NullValue};
-use std::iter;
use super::{WebGLExtension, WebGLExtensions, WebGLExtensionSpec};
#[dom_struct]
@@ -70,9 +69,10 @@ impl OESVertexArrayObjectMethods for OESVertexArrayObject {
}
// Remove VAO references from buffers
- let buffers = vao.bound_attrib_buffers();
- for buffer in buffers {
- buffer.remove_vao_reference(vao.id());
+ for (_, &(_, ref buffer)) in vao.bound_attrib_buffers().borrow().iter() {
+ if let Some(ref buffer) = *buffer {
+ buffer.remove_vao_reference(vao.id());
+ }
}
if let Some(buffer) = vao.bound_buffer_element_array() {
buffer.remove_vao_reference(vao.id());
@@ -94,11 +94,12 @@ impl OESVertexArrayObjectMethods for OESVertexArrayObject {
fn BindVertexArrayOES(&self, vao: Option<&WebGLVertexArrayObjectOES>) {
if let Some(bound_vao) = self.bound_vao.get() {
// Store buffers attached to attrib pointers
- let buffers = self.ctx.borrow_bound_attrib_buffers();
- bound_vao.set_bound_attrib_buffers(buffers.iter().map(|(key, buffer)| {
- (*buffer).add_vao_reference(bound_vao.id());
- (*key, &**buffer)
- }));
+ bound_vao.bound_attrib_buffers().set_from(&self.ctx.bound_attrib_buffers());
+ for (_, (_, ref buffer)) in bound_vao.bound_attrib_buffers().borrow().iter() {
+ if let Some(ref buffer) = *buffer {
+ buffer.add_vao_reference(bound_vao.id());
+ }
+ }
// Store element array buffer
let element_array = self.ctx.bound_buffer_element_array();
bound_vao.set_bound_buffer_element_array(element_array.as_ref().map(|buffer| {
@@ -118,14 +119,13 @@ impl OESVertexArrayObjectMethods for OESVertexArrayObject {
self.bound_vao.set(Some(&vao));
// Restore WebGLRenderingContext current bindings
- let buffers = vao.borrow_bound_attrib_buffers();
- self.ctx.set_bound_attrib_buffers(buffers.iter().map(|(k, v)| (*k, &**v)));
+ self.ctx.bound_attrib_buffers().set_from(&vao.bound_attrib_buffers());
let element_array = vao.bound_buffer_element_array();
self.ctx.set_bound_buffer_element_array(element_array.as_ref().map(|buffer| &**buffer));
} else {
self.ctx.send_command(WebGLCommand::BindVertexArray(None));
self.bound_vao.set(None);
- self.ctx.set_bound_attrib_buffers(iter::empty());
+ self.ctx.bound_attrib_buffers().clear();
}
}
}