Remove the old single-color-attachment calls from gl::Framebuffer, preferring the new multiple-attachment versions.

TRAC #22656

Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Author: Jamie Madill

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@2008 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index c0756e1..c274091 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1421,7 +1421,7 @@
       case GL_ALPHA_BITS:
         {
             gl::Framebuffer *framebuffer = getDrawFramebuffer();
-            gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
+            gl::Renderbuffer *colorbuffer = framebuffer->getFirstColorBuffer();
 
             if (colorbuffer)
             {
@@ -1867,7 +1867,8 @@
     {
         mask &= ~GL_COLOR_BUFFER_BIT;
 
-        if (framebufferObject->getColorbufferType() != GL_NONE)
+        // TODO: MRT clear
+        if (framebufferObject->getColorbufferType(0) != GL_NONE)
         {
             finalMask |= GL_COLOR_BUFFER_BIT;
         }
@@ -2142,6 +2143,11 @@
     return mRenderer->getMaxSupportedSamples();
 }
 
+unsigned int Context::getMaximumRenderTargets() const
+{
+    return mRenderer->getMaxRenderTargets();
+}
+
 bool Context::supportsEventQueries() const
 {
     return mSupportsEventQueries;
@@ -2270,7 +2276,7 @@
         return gl::error(GL_INVALID_OPERATION, false);
     }
 
-    Renderbuffer *renderbuffer = framebuffer->getColorbuffer();
+    Renderbuffer *renderbuffer = framebuffer->getReadColorbuffer();
     if (!renderbuffer)
     {
         return gl::error(GL_INVALID_OPERATION, false);
@@ -2618,6 +2624,7 @@
                               GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
                               GLbitfield mask)
 {
+    // TODO: mrt support for blit
     Framebuffer *readFramebuffer = getReadFramebuffer();
     Framebuffer *drawFramebuffer = getDrawFramebuffer();
 
@@ -2632,10 +2639,10 @@
         return gl::error(GL_INVALID_OPERATION);
     }
 
-    int readBufferWidth = readFramebuffer->getColorbuffer()->getWidth();
-    int readBufferHeight = readFramebuffer->getColorbuffer()->getHeight();
-    int drawBufferWidth = drawFramebuffer->getColorbuffer()->getWidth();
-    int drawBufferHeight = drawFramebuffer->getColorbuffer()->getHeight();
+    int readBufferWidth = readFramebuffer->getColorbuffer(0)->getWidth();
+    int readBufferHeight = readFramebuffer->getColorbuffer(0)->getHeight();
+    int drawBufferWidth = drawFramebuffer->getColorbuffer(0)->getWidth();
+    int drawBufferHeight = drawFramebuffer->getColorbuffer(0)->getHeight();
 
     Rectangle sourceRect;
     Rectangle destRect;
@@ -2794,12 +2801,12 @@
 
     if (mask & GL_COLOR_BUFFER_BIT)
     {
-        const bool validReadType = readFramebuffer->getColorbufferType() == GL_TEXTURE_2D ||
-            readFramebuffer->getColorbufferType() == GL_RENDERBUFFER;
-        const bool validDrawType = drawFramebuffer->getColorbufferType() == GL_TEXTURE_2D ||
-            drawFramebuffer->getColorbufferType() == GL_RENDERBUFFER;
+        const bool validReadType = readFramebuffer->getColorbufferType(0) == GL_TEXTURE_2D ||
+            readFramebuffer->getColorbufferType(0) == GL_RENDERBUFFER;
+        const bool validDrawType = drawFramebuffer->getColorbufferType(0) == GL_TEXTURE_2D ||
+            drawFramebuffer->getColorbufferType(0) == GL_RENDERBUFFER;
         if (!validReadType || !validDrawType ||
-            readFramebuffer->getColorbuffer()->getActualFormat() != drawFramebuffer->getColorbuffer()->getActualFormat())
+            readFramebuffer->getColorbuffer(0)->getActualFormat() != drawFramebuffer->getColorbuffer(0)->getActualFormat())
         {
             ERR("Color buffer format conversion in BlitFramebufferANGLE not supported by this implementation");
             return gl::error(GL_INVALID_OPERATION);
diff --git a/src/libGLESv2/Context.h b/src/libGLESv2/Context.h
index 770ad1c..9c222be 100644
--- a/src/libGLESv2/Context.h
+++ b/src/libGLESv2/Context.h
@@ -366,6 +366,7 @@
     int getMaximumTextureDimension() const;
     int getMaximumCubeTextureDimension() const;
     int getMaximumTextureLevel() const;
+    unsigned int getMaximumRenderTargets() const;
     GLsizei getMaxSupportedSamples() const;
     const char *getExtensionString() const;
     const char *getRendererString() const;
diff --git a/src/libGLESv2/Framebuffer.cpp b/src/libGLESv2/Framebuffer.cpp
index 947269b..e10ff58 100644
--- a/src/libGLESv2/Framebuffer.cpp
+++ b/src/libGLESv2/Framebuffer.cpp
@@ -77,11 +77,6 @@
     mColorbufferPointers[colorAttachment].set(lookupRenderbuffer(type, colorbuffer));
 }
 
-void Framebuffer::setColorbuffer(GLenum type, GLuint colorbuffer)
-{
-    setColorbuffer(0, type, colorbuffer);
-}
-
 void Framebuffer::setDepthbuffer(GLenum type, GLuint depthbuffer)
 {
     mDepthbufferType = (depthbuffer != 0) ? type : GL_NONE;
@@ -156,11 +151,6 @@
     return 0;
 }
 
-unsigned int Framebuffer::getRenderTargetSerial() const
-{
-    return getRenderTargetSerial(0);
-}
-
 unsigned int Framebuffer::getDepthbufferSerial() const
 {
     Renderbuffer *depthbuffer = mDepthbufferPointer.get();
@@ -191,11 +181,6 @@
     return mColorbufferPointers[colorAttachment].get();
 }
 
-Renderbuffer *Framebuffer::getColorbuffer() const
-{
-    return getColorbuffer(0);
-}
-
 Renderbuffer *Framebuffer::getDepthbuffer() const
 {
     return mDepthbufferPointer.get();
@@ -243,11 +228,6 @@
     return mColorbufferTypes[colorAttachment];
 }
 
-GLenum Framebuffer::getColorbufferType() const
-{
-    return getColorbufferType(0);
-}
-
 GLenum Framebuffer::getDepthbufferType() const
 {
     return mDepthbufferType;
@@ -264,11 +244,6 @@
     return mColorbufferPointers[colorAttachment].id();
 }
 
-GLuint Framebuffer::getColorbufferHandle() const
-{
-    return getColorbufferHandle(0);
-}
-
 GLuint Framebuffer::getDepthbufferHandle() const
 {
     return mDepthbufferPointer.id();
diff --git a/src/libGLESv2/Framebuffer.h b/src/libGLESv2/Framebuffer.h
index 9a1bee0..24225ec 100644
--- a/src/libGLESv2/Framebuffer.h
+++ b/src/libGLESv2/Framebuffer.h
@@ -35,7 +35,6 @@
     virtual ~Framebuffer();
 
     void setColorbuffer(unsigned int colorAttachment, GLenum type, GLuint colorbuffer);
-    void setColorbuffer(GLenum type, GLuint colorbuffer);
     void setDepthbuffer(GLenum type, GLuint depthbuffer);
     void setStencilbuffer(GLenum type, GLuint stencilbuffer);
 
@@ -43,12 +42,10 @@
     void detachRenderbuffer(GLuint renderbuffer);
 
     unsigned int getRenderTargetSerial(unsigned int colorAttachment) const;
-    unsigned int getRenderTargetSerial() const;
     unsigned int getDepthbufferSerial() const;
     unsigned int getStencilbufferSerial() const;
 
     Renderbuffer *getColorbuffer(unsigned int colorAttachment) const;
-    Renderbuffer *getColorbuffer() const;
     Renderbuffer *getDepthbuffer() const;
     Renderbuffer *getStencilbuffer() const;
     Renderbuffer *getDepthOrStencilbuffer() const;
@@ -56,12 +53,10 @@
     Renderbuffer *getFirstColorBuffer() const;
 
     GLenum getColorbufferType(unsigned int colorAttachment) const;
-    GLenum getColorbufferType() const;
     GLenum getDepthbufferType() const;
     GLenum getStencilbufferType() const;
 
     GLuint getColorbufferHandle(unsigned int colorAttachment) const;
-    GLuint getColorbufferHandle() const;
     GLuint getDepthbufferHandle() const;
     GLuint getStencilbufferHandle() const;
 
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index cf9e7b4..2025b1d 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -1317,12 +1317,12 @@
                 return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION);
             }
 
-            if (context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() != 0)
+            if (context->getReadFramebufferHandle() != 0 && framebuffer->getSamples() != 0)
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            gl::Renderbuffer *source = framebuffer->getColorbuffer();
+            gl::Renderbuffer *source = framebuffer->getReadColorbuffer();
             GLenum colorbufferFormat = source->getInternalFormat();
 
             // [OpenGL ES 2.0.24] table 3.9
@@ -1493,12 +1493,12 @@
                 return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION);
             }
 
-            if (context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() != 0)
+            if (context->getReadFramebufferHandle() != 0 && framebuffer->getSamples() != 0)
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            gl::Renderbuffer *source = framebuffer->getColorbuffer();
+            gl::Renderbuffer *source = framebuffer->getReadColorbuffer();
             GLenum colorbufferFormat = source->getInternalFormat();
             gl::Texture *texture = NULL;
             GLenum textureFormat = GL_RGBA;
@@ -2398,19 +2398,30 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            switch (attachment)
+            if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
             {
-              case GL_COLOR_ATTACHMENT0:
-                framebuffer->setColorbuffer(GL_RENDERBUFFER, renderbuffer);
-                break;
-              case GL_DEPTH_ATTACHMENT:
-                framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);
-                break;
-              case GL_STENCIL_ATTACHMENT:
-                framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);
-                break;
-              default:
-                return gl::error(GL_INVALID_ENUM);
+                const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
+
+                if (colorAttachment >= context->getMaximumRenderTargets())
+                {
+                    return gl::error(GL_INVALID_VALUE);
+                }
+
+                framebuffer->setColorbuffer(colorAttachment, GL_RENDERBUFFER, renderbuffer);
+            }
+            else
+            {
+                switch (attachment)
+                {
+                  case GL_DEPTH_ATTACHMENT:
+                    framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);
+                    break;
+                  case GL_STENCIL_ATTACHMENT:
+                    framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);
+                    break;
+                  default:
+                    return gl::error(GL_INVALID_ENUM);
+                }
             }
         }
     }
@@ -2432,20 +2443,31 @@
             return gl::error(GL_INVALID_ENUM);
         }
 
-        switch (attachment)
-        {
-          case GL_COLOR_ATTACHMENT0:
-          case GL_DEPTH_ATTACHMENT:
-          case GL_STENCIL_ATTACHMENT:
-            break;
-          default:
-            return gl::error(GL_INVALID_ENUM);
-        }
-
         gl::Context *context = gl::getNonLostContext();
 
         if (context)
         {
+            if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
+            {
+                const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
+
+                if (colorAttachment >= context->getMaximumRenderTargets())
+                {
+                    return gl::error(GL_INVALID_VALUE);
+                }
+            }
+            else
+            {
+                switch (attachment)
+                {
+                  case GL_DEPTH_ATTACHMENT:
+                  case GL_STENCIL_ATTACHMENT:
+                    break;
+                  default:
+                    return gl::error(GL_INVALID_ENUM);
+                }
+            }
+
             if (texture == 0)
             {
                 textarget = GL_NONE;
@@ -2522,11 +2544,24 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            switch (attachment)
+            if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
             {
-              case GL_COLOR_ATTACHMENT0:  framebuffer->setColorbuffer(textarget, texture);   break;
-              case GL_DEPTH_ATTACHMENT:   framebuffer->setDepthbuffer(textarget, texture);   break;
-              case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;
+                const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
+
+                if (colorAttachment >= context->getMaximumRenderTargets())
+                {
+                    return gl::error(GL_INVALID_VALUE);
+                }
+
+                framebuffer->setColorbuffer(colorAttachment, textarget, texture);
+            }
+            else
+            {
+                switch (attachment)
+                {
+                  case GL_DEPTH_ATTACHMENT:   framebuffer->setDepthbuffer(textarget, texture);   break;
+                  case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;
+                }
             }
         }
     }
@@ -3200,21 +3235,33 @@
 
             GLenum attachmentType;
             GLuint attachmentHandle;
-            switch (attachment)
+
+            if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
             {
-              case GL_COLOR_ATTACHMENT0:    
-                attachmentType = framebuffer->getColorbufferType();
-                attachmentHandle = framebuffer->getColorbufferHandle(); 
-                break;
-              case GL_DEPTH_ATTACHMENT:     
-                attachmentType = framebuffer->getDepthbufferType();
-                attachmentHandle = framebuffer->getDepthbufferHandle();
-                break;
-              case GL_STENCIL_ATTACHMENT:   
-                attachmentType = framebuffer->getStencilbufferType();
-                attachmentHandle = framebuffer->getStencilbufferHandle();
-                break;
-              default: return gl::error(GL_INVALID_ENUM);
+                const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
+
+                if (colorAttachment >= context->getMaximumRenderTargets())
+                {
+                    return gl::error(GL_INVALID_ENUM);
+                }
+
+                attachmentType = framebuffer->getColorbufferType(colorAttachment);
+                attachmentHandle = framebuffer->getColorbufferHandle(colorAttachment);
+            }
+            else
+            {
+                switch (attachment)
+                {
+                  case GL_DEPTH_ATTACHMENT:
+                    attachmentType = framebuffer->getDepthbufferType();
+                    attachmentHandle = framebuffer->getDepthbufferHandle();
+                    break;
+                  case GL_STENCIL_ATTACHMENT:
+                    attachmentType = framebuffer->getStencilbufferType();
+                    attachmentHandle = framebuffer->getStencilbufferHandle();
+                    break;
+                  default: return gl::error(GL_INVALID_ENUM);
+                }
             }
 
             GLenum attachmentObjectType;   // Type category
diff --git a/src/libGLESv2/renderer/Blit.cpp b/src/libGLESv2/renderer/Blit.cpp
index 17fa283..2a3ce39 100644
--- a/src/libGLESv2/renderer/Blit.cpp
+++ b/src/libGLESv2/renderer/Blit.cpp
@@ -215,7 +215,7 @@
 {
     RenderTarget9 *renderTarget = NULL;
     IDirect3DSurface9 *source = NULL;
-    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
+    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
 
     if (colorbuffer)
     {
@@ -251,7 +251,7 @@
 {
     RenderTarget9 *renderTarget = NULL;
     IDirect3DSurface9 *source = NULL;
-    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
+    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
 
     if (colorbuffer)
     {
diff --git a/src/libGLESv2/renderer/Image11.cpp b/src/libGLESv2/renderer/Image11.cpp
index 937ce4d..861eb20 100644
--- a/src/libGLESv2/renderer/Image11.cpp
+++ b/src/libGLESv2/renderer/Image11.cpp
@@ -278,7 +278,7 @@
 
 void Image11::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source)
 {
-    if (source->getColorbuffer() && source->getColorbuffer()->getActualFormat() == (GLuint)mActualFormat)
+    if (source->getReadColorbuffer() && source->getReadColorbuffer()->getActualFormat() == (GLuint)mActualFormat)
     {
         // No conversion needed-- use copyback fastpath
         ID3D11Texture2D *colorBufferTexture = NULL;
diff --git a/src/libGLESv2/renderer/Image9.cpp b/src/libGLESv2/renderer/Image9.cpp
index 0dd5ae6..b3dcc59 100644
--- a/src/libGLESv2/renderer/Image9.cpp
+++ b/src/libGLESv2/renderer/Image9.cpp
@@ -484,7 +484,7 @@
 {
     RenderTarget9 *renderTarget = NULL;
     IDirect3DSurface9 *surface = NULL;
-    gl::Renderbuffer *colorbuffer = source->getColorbuffer();
+    gl::Renderbuffer *colorbuffer = source->getColorbuffer(0);
 
     if (colorbuffer)
     {
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index a0439b2..3a56e2d 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -814,12 +814,13 @@
 
 bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
 {
+    // TODO: mrt support
     // Get the color render buffer and serial
     gl::Renderbuffer *renderbufferObject = NULL;
     unsigned int renderTargetSerial = 0;
-    if (framebuffer->getColorbufferType() != GL_NONE)
+    if (framebuffer->getColorbufferType(0) != GL_NONE)
     {
-        renderbufferObject = framebuffer->getColorbuffer();
+        renderbufferObject = framebuffer->getColorbuffer(0);
 
         if (!renderbufferObject)
         {
@@ -1464,7 +1465,8 @@
      {
          if (clearParams.mask & GL_COLOR_BUFFER_BIT)
          {
-             gl::Renderbuffer *renderbufferObject = frameBuffer->getColorbuffer();
+             // TODO: mrt clear
+             gl::Renderbuffer *renderbufferObject = frameBuffer->getColorbuffer(0);
              if (renderbufferObject)
              {
                 RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(renderbufferObject->getRenderTarget());
@@ -2406,7 +2408,7 @@
 bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
                            GLint xoffset, GLint yoffset, TextureStorageInterface2D *storage, GLint level)
 {
-    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
+    gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
     if (!colorbuffer)
     {
         ERR("Failed to retrieve the color buffer from the frame buffer.");
@@ -2469,7 +2471,7 @@
 bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
                            GLint xoffset, GLint yoffset, TextureStorageInterfaceCube *storage, GLenum target, GLint level)
 {
-    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
+    gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
     if (!colorbuffer)
     {
         ERR("Failed to retrieve the color buffer from the frame buffer.");
@@ -2844,7 +2846,8 @@
 
 bool Renderer11::getRenderTargetResource(gl::Framebuffer *framebuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
 {
-    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
+    // TODO: mrt supprt
+    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
     if (colorbuffer)
     {
         RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget());
@@ -3320,13 +3323,14 @@
 bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget,
                           const gl::Rectangle &drawRect, BlitTarget target)
 {
+    // TODO: mrt support
     ASSERT(readRect.width == drawRect.width && readRect.height == drawRect.height);
 
     gl::Renderbuffer *readBuffer = NULL;
     switch (target)
     {
       case BLIT_RENDERTARGET:
-        readBuffer = readTarget->getColorbuffer();
+        readBuffer = readTarget->getColorbuffer(0);
         break;
       case BLIT_DEPTHSTENCIL:
         readBuffer = readTarget->getDepthOrStencilbuffer();
@@ -3384,7 +3388,7 @@
     switch (target)
     {
       case BLIT_RENDERTARGET:
-        drawBuffer = drawTarget->getColorbuffer();
+        drawBuffer = drawTarget->getColorbuffer(0);
         break;
       case BLIT_DEPTHSTENCIL:
         drawBuffer = drawTarget->getDepthOrStencilbuffer();
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index e3ed3a2..6c88f71 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -1221,9 +1221,9 @@
     // if there is no color attachment we must synthesize a NULL colorattachment
     // to keep the D3D runtime happy.  This should only be possible if depth texturing.
     gl::Renderbuffer *renderbufferObject = NULL;
-    if (framebuffer->getColorbufferType() != GL_NONE)
+    if (framebuffer->getColorbufferType(0) != GL_NONE)
     {
-        renderbufferObject = framebuffer->getColorbuffer();
+        renderbufferObject = framebuffer->getColorbuffer(0);
     }
     else
     {
@@ -2567,8 +2567,8 @@
 
     if (blitRenderTarget)
     {
-        gl::Renderbuffer *readBuffer = readFramebuffer->getColorbuffer();
-        gl::Renderbuffer *drawBuffer = drawFramebuffer->getColorbuffer();
+        gl::Renderbuffer *readBuffer = readFramebuffer->getColorbuffer(0);
+        gl::Renderbuffer *drawBuffer = drawFramebuffer->getColorbuffer(0);
         RenderTarget9 *readRenderTarget = NULL;
         RenderTarget9 *drawRenderTarget = NULL;
         IDirect3DSurface9* readSurface = NULL;
@@ -2675,7 +2675,7 @@
 {
     RenderTarget9 *renderTarget = NULL;
     IDirect3DSurface9 *surface = NULL;
-    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
+    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
 
     if (colorbuffer)
     {