Don't panic if WebGL thread can't be reached during finalization.

This commit is contained in:
Josh Matthews 2019-07-29 10:05:48 -04:00
parent eb4f2d150a
commit 8f5c37c0b5
8 changed files with 78 additions and 43 deletions

View file

@ -339,6 +339,12 @@ impl WebGLRenderingContext {
.unwrap();
}
pub fn send_command_ignored(&self, command: WebGLCommand) {
let _ = self
.webgl_sender
.send(command, capture_webgl_backtrace(self));
}
#[inline]
pub fn send_vr_command(&self, command: WebVRCommand) {
self.webgl_sender.send_vr(command).unwrap();
@ -1039,7 +1045,7 @@ impl WebGLRenderingContext {
self.current_vao.set(None);
self.send_command(WebGLCommand::BindVertexArray(None));
}
vao.delete();
vao.delete(false);
}
}
@ -2172,7 +2178,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
self.bound_buffer_array.set(None);
buffer.decrement_attached_counter();
}
buffer.mark_for_deletion();
buffer.mark_for_deletion(false);
}
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.6
@ -2188,7 +2194,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
WebGLFramebufferBindingRequest::Default
))
);
framebuffer.delete()
framebuffer.delete(false)
}
}
@ -2205,7 +2211,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
None
))
);
renderbuffer.delete()
renderbuffer.delete(false)
}
}
@ -2240,7 +2246,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
));
}
texture.delete()
texture.delete(false)
}
}
@ -2248,7 +2254,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
fn DeleteProgram(&self, program: Option<&WebGLProgram>) {
if let Some(program) = program {
handle_potential_webgl_error!(self, self.validate_ownership(program), return);
program.mark_for_deletion()
program.mark_for_deletion(false)
}
}
@ -2256,7 +2262,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
fn DeleteShader(&self, shader: Option<&WebGLShader>) {
if let Some(shader) = shader {
handle_potential_webgl_error!(self, self.validate_ownership(shader), return);
shader.mark_for_deletion()
shader.mark_for_deletion(false)
}
}