Implement multiple render target support in glBlitFramebufferANGLE.

TRAC #22679

Signed-off-by: Geoff Lang
Signed-off-by: Shannon Woods
Author: Jamie Madill

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2095 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index e347677..e978c4e 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -2920,11 +2920,9 @@
 bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect,
                           bool blitRenderTarget, bool blitDepthStencil)
 {
-    // TODO: mrt blit support
     if (blitRenderTarget)
     {
         gl::Renderbuffer *readBuffer = readTarget->getReadColorbuffer();
-        gl::Renderbuffer *drawBuffer = drawTarget->getColorbuffer(0);
 
         if (!readBuffer)
         {
@@ -2932,18 +2930,27 @@
             return gl::error(GL_OUT_OF_MEMORY, false);
         }
 
-        if (!drawBuffer)
-        {
-            ERR("Failed to retrieve the draw buffer from the draw framebuffer.");
-            return gl::error(GL_OUT_OF_MEMORY, false);
-        }
-
         RenderTarget *readRenderTarget = readBuffer->getRenderTarget();
-        RenderTarget *drawRenderTarget = drawBuffer->getRenderTarget();
 
-        if (!blitRenderbufferRect(readRect, drawRect, readRenderTarget, drawRenderTarget))
+        for (unsigned int colorAttachment = 0; colorAttachment < gl::IMPLEMENTATION_MAX_DRAW_BUFFERS; colorAttachment++)
         {
-            return false;
+            if (drawTarget->isEnabledColorAttachment(colorAttachment))
+            {
+                gl::Renderbuffer *drawBuffer = drawTarget->getColorbuffer(colorAttachment);
+
+                if (!drawBuffer)
+                {
+                    ERR("Failed to retrieve the draw buffer from the draw framebuffer.");
+                    return gl::error(GL_OUT_OF_MEMORY, false);
+                }
+
+                RenderTarget *drawRenderTarget = drawBuffer->getRenderTarget();
+
+                if (!blitRenderbufferRect(readRect, drawRect, readRenderTarget, drawRenderTarget))
+                {
+                    return false;
+                }
+            }
         }
     }