webgl: Ignore webgl communication errors when dropping vertex array objects.

This commit is contained in:
Josh Matthews 2020-03-19 23:34:26 -04:00
parent 0fef1bfbec
commit 3a3397fbce
4 changed files with 12 additions and 12 deletions

View file

@ -59,11 +59,11 @@ impl VertexArrayObject {
for attrib_data in &**self.vertex_attribs.borrow() { for attrib_data in &**self.vertex_attribs.borrow() {
if let Some(buffer) = attrib_data.buffer() { if let Some(buffer) = attrib_data.buffer() {
buffer.decrement_attached_counter(); buffer.decrement_attached_counter(fallible);
} }
} }
if let Some(buffer) = self.element_array_buffer.get() { if let Some(buffer) = self.element_array_buffer.get() {
buffer.decrement_attached_counter(); buffer.decrement_attached_counter(fallible);
} }
} }
@ -136,7 +136,7 @@ impl VertexArrayObject {
offset as u32, offset as u32,
)); ));
if let Some(old) = data.buffer() { if let Some(old) = data.buffer() {
old.decrement_attached_counter(); old.decrement_attached_counter(false);
} }
*data = VertexAttribData { *data = VertexAttribData {
@ -168,7 +168,7 @@ impl VertexArrayObject {
if b.id() != buffer.id() { if b.id() != buffer.id() {
continue; continue;
} }
b.decrement_attached_counter(); b.decrement_attached_counter(false);
} }
attrib.buffer = None; attrib.buffer = None;
} }
@ -177,7 +177,7 @@ impl VertexArrayObject {
.get() .get()
.map_or(false, |b| buffer == &*b) .map_or(false, |b| buffer == &*b)
{ {
buffer.decrement_attached_counter(); buffer.decrement_attached_counter(false);
self.element_array_buffer.set(None); self.element_array_buffer.set(None);
} }
} }

View file

@ -222,7 +222,7 @@ impl WebGL2RenderingContext {
fn unbind_from(&self, slot: &MutNullableDom<WebGLBuffer>, buffer: &WebGLBuffer) { fn unbind_from(&self, slot: &MutNullableDom<WebGLBuffer>, buffer: &WebGLBuffer) {
if slot.get().map_or(false, |b| buffer == &*b) { if slot.get().map_or(false, |b| buffer == &*b) {
buffer.decrement_attached_counter(); buffer.decrement_attached_counter(false);
slot.set(None); slot.set(None);
} }
} }
@ -3405,7 +3405,7 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
for slot in &[&generic_slot, &indexed_binding.buffer] { for slot in &[&generic_slot, &indexed_binding.buffer] {
if let Some(old) = slot.get() { if let Some(old) = slot.get() {
old.decrement_attached_counter(); old.decrement_attached_counter(false);
} }
slot.set(buffer); slot.set(buffer);
} }
@ -3483,7 +3483,7 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
for slot in &[&generic_slot, &indexed_binding.buffer] { for slot in &[&generic_slot, &indexed_binding.buffer] {
if let Some(old) = slot.get() { if let Some(old) = slot.get() {
old.decrement_attached_counter(); old.decrement_attached_counter(false);
} }
slot.set(buffer); slot.set(buffer);
} }

View file

@ -166,7 +166,7 @@ impl WebGLBuffer {
); );
} }
pub fn decrement_attached_counter(&self) { pub fn decrement_attached_counter(&self, fallible: bool) {
self.attached_counter.set( self.attached_counter.set(
self.attached_counter self.attached_counter
.get() .get()
@ -174,7 +174,7 @@ impl WebGLBuffer {
.expect("refcount underflowed"), .expect("refcount underflowed"),
); );
if self.is_deleted() { if self.is_deleted() {
self.delete(false); self.delete(fallible);
} }
} }

View file

@ -1317,7 +1317,7 @@ impl WebGLRenderingContext {
self.send_command(WebGLCommand::BindBuffer(target, buffer.map(|b| b.id()))); self.send_command(WebGLCommand::BindBuffer(target, buffer.map(|b| b.id())));
if let Some(old) = slot.get() { if let Some(old) = slot.get() {
old.decrement_attached_counter(); old.decrement_attached_counter(false);
} }
slot.set(buffer); slot.set(buffer);
@ -2565,7 +2565,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
.map_or(false, |b| buffer == &*b) .map_or(false, |b| buffer == &*b)
{ {
self.bound_buffer_array.set(None); self.bound_buffer_array.set(None);
buffer.decrement_attached_counter(); buffer.decrement_attached_counter(false);
} }
buffer.mark_for_deletion(false); buffer.mark_for_deletion(false);
} }