diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-09-12 16:36:08 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-12 16:36:08 -0400 |
commit | 26745b27419f687dec1e23434a5be827d4342768 (patch) | |
tree | 5ee5e5f2b9f49a506cc64037ccc5706aa7736c7c /components/script/dom/webglrenderbuffer.rs | |
parent | 910cc23a6e85cced43905f7615065b23bdb54b42 (diff) | |
parent | 4edb7b194c99a1d394dddaeac2f5064ed8e93f62 (diff) | |
download | servo-26745b27419f687dec1e23434a5be827d4342768.tar.gz servo-26745b27419f687dec1e23434a5be827d4342768.zip |
Auto merge of #21461 - jdm:webgltmp2, r=nox
Various webgl fixes for framebuffer attachment test
These changes resolve all panics on macOS when running framebuffer-object-attachment.html in headless and headful testing.
---
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] There are tests for these changes OR
- [x] Fixes #13710. Fixes #20570.
<!-- 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/21461)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/webglrenderbuffer.rs')
-rw-r--r-- | components/script/dom/webglrenderbuffer.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/components/script/dom/webglrenderbuffer.rs b/components/script/dom/webglrenderbuffer.rs index fa7d7324f94..96ef3bb0d67 100644 --- a/components/script/dom/webglrenderbuffer.rs +++ b/components/script/dom/webglrenderbuffer.rs @@ -23,6 +23,7 @@ pub struct WebGLRenderbuffer { is_deleted: Cell<bool>, size: Cell<Option<(i32, i32)>>, internal_format: Cell<Option<u32>>, + is_initialized: Cell<bool>, } impl WebGLRenderbuffer { @@ -34,6 +35,7 @@ impl WebGLRenderbuffer { is_deleted: Cell::new(false), internal_format: Cell::new(None), size: Cell::new(None), + is_initialized: Cell::new(false), } } @@ -66,6 +68,14 @@ impl WebGLRenderbuffer { self.internal_format.get().unwrap_or(constants::RGBA4) } + pub fn mark_initialized(&self) { + self.is_initialized.set(true); + } + + pub fn is_initialized(&self) -> bool { + self.is_initialized.get() + } + pub fn bind(&self, target: u32) { self.ever_bound.set(true); self.upcast::<WebGLObject>() @@ -76,6 +86,22 @@ impl WebGLRenderbuffer { pub fn delete(&self) { if !self.is_deleted.get() { self.is_deleted.set(true); + + /* + If a renderbuffer object is deleted while its image is attached to the currently + bound framebuffer, then it is as if FramebufferRenderbuffer had been called, with + a renderbuffer of 0, for each attachment point to which this image was attached + in the currently bound framebuffer. + - GLES 2.0, 4.4.3, "Attaching Renderbuffer Images to a Framebuffer" + */ + let currently_bound_framebuffer = + self.upcast::<WebGLObject>() + .context() + .bound_framebuffer(); + if let Some(fb) = currently_bound_framebuffer { + fb.detach_renderbuffer(self); + } + self.upcast::<WebGLObject>() .context() .send_command(WebGLCommand::DeleteRenderbuffer(self.id)); |