Bug 1303879 - Explicitly nuke attachment points. - r=mtseng draft
authorJeff Gilbert <jgilbert@mozilla.com>
Wed, 07 Sep 2016 14:17:53 -0700
changeset 415745 8b43f584f629e8227788c909f7c5b00d5c28e19e
parent 415744 7970e8fccc1756b7afff4a5a35baddd4245b34b4
child 415746 5ceff567db55eee03fdf7330ff8280e2d96c94e5
push id29953
push userbmo:jgilbert@mozilla.com
push dateTue, 20 Sep 2016 23:29:17 +0000
reviewersmtseng
bugs1303879
milestone51.0a1
Bug 1303879 - Explicitly nuke attachment points. - r=mtseng MozReview-Commit-ID: Gd9tFq3ZAtm
dom/canvas/WebGLFramebuffer.cpp
--- a/dom/canvas/WebGLFramebuffer.cpp
+++ b/dom/canvas/WebGLFramebuffer.cpp
@@ -339,31 +339,18 @@ WebGLFBAttachPoint::IsComplete(WebGLCont
     }
 
     return true;
 }
 
 void
 WebGLFBAttachPoint::Resolve(gl::GLContext* gl, FBTarget target) const
 {
-    if (!HasImage()) {
-        switch (mAttachmentPoint) {
-        case LOCAL_GL_DEPTH_ATTACHMENT:
-        case LOCAL_GL_STENCIL_ATTACHMENT:
-        case LOCAL_GL_DEPTH_STENCIL_ATTACHMENT:
-            break;
-
-        default:
-            gl->fFramebufferRenderbuffer(target.get(), mAttachmentPoint,
-                                         LOCAL_GL_RENDERBUFFER, 0);
-            break;
-        }
-
+    if (!HasImage())
         return;
-    }
 
     if (Renderbuffer()) {
         Renderbuffer()->DoFramebufferRenderbuffer(target, mAttachmentPoint);
         return;
     }
     MOZ_ASSERT(Texture());
 
     MOZ_ASSERT(gl == Texture()->mContext->GL());
@@ -907,29 +894,34 @@ WebGLFramebuffer::ValidateForRead(const 
 // Resolution and caching
 
 void
 WebGLFramebuffer::ResolveAttachments(FBTarget target) const
 {
     const auto& gl = mContext->gl;
 
     ////
+    // Nuke attachment points.
+
+    for (uint32_t i = 0; i < mContext->mImplMaxColorAttachments; i++) {
+        const GLenum attachEnum = LOCAL_GL_COLOR_ATTACHMENT0 + i;
+        gl->fFramebufferRenderbuffer(target.get(), attachEnum, LOCAL_GL_RENDERBUFFER, 0);
+    }
+
+    gl->fFramebufferRenderbuffer(target.get(), LOCAL_GL_DEPTH_ATTACHMENT,
+                                 LOCAL_GL_RENDERBUFFER, 0);
+    gl->fFramebufferRenderbuffer(target.get(), LOCAL_GL_STENCIL_ATTACHMENT,
+                                 LOCAL_GL_RENDERBUFFER, 0);
+
+    ////
 
     for (const auto& attach : mColorAttachments) {
         attach.Resolve(gl, target);
     }
 
-    ////
-
-    // Nuke the depth and stencil attachment points.
-    gl->fFramebufferRenderbuffer(target.get(), LOCAL_GL_DEPTH_ATTACHMENT,
-                                 LOCAL_GL_RENDERBUFFER, 0);
-    gl->fFramebufferRenderbuffer(target.get(), LOCAL_GL_STENCIL_ATTACHMENT,
-                                 LOCAL_GL_RENDERBUFFER, 0);
-
     mDepthAttachment.Resolve(gl, target);
     mStencilAttachment.Resolve(gl, target);
     mDepthStencilAttachment.Resolve(gl, target);
 }
 
 bool
 WebGLFramebuffer::ResolveAttachmentData(const char* funcName) const
 {