diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2018-06-20 15:10:32 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2018-06-20 15:59:06 +0200 |
commit | fc3dd7cefc70be746c6daea3dc74c83c89a07cee (patch) | |
tree | d1d1350ad7e43f0a3e2d3618538b7af61bd88160 /components/script/dom/webgl_extensions/ext/oesvertexarrayobject.rs | |
parent | 440e855c335cce5f6523044ac53f54ac727d92e7 (diff) | |
download | servo-fc3dd7cefc70be746c6daea3dc74c83c89a07cee.tar.gz servo-fc3dd7cefc70be746c6daea3dc74c83c89a07cee.zip |
Implement checks for vertex attribs enabled as arrays without a bound buffer
Diffstat (limited to 'components/script/dom/webgl_extensions/ext/oesvertexarrayobject.rs')
-rw-r--r-- | components/script/dom/webgl_extensions/ext/oesvertexarrayobject.rs | 24 |
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(); } } } |