Adds a function to get the texture resource of a framebuffer's color render target.

TRAC #22349

Author: Shannon Woods
Signed-off-by: Jamie Madill
Signed-off-by: Daniel Koch

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1761 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index abc2e34..1d0731a 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -2338,6 +2338,45 @@
     return new IndexBuffer11(this);
 }
 
+bool Renderer11::getRenderTargetResource(gl::Framebuffer *framebuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
+{
+    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
+    if (colorbuffer)
+    {
+        RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget());
+        if (renderTarget)
+        {
+            *subresourceIndex = renderTarget->getSubresourceIndex();
+
+            ID3D11RenderTargetView *colorBufferRTV = renderTarget->getRenderTargetView();
+            if (colorBufferRTV)
+            {
+                ID3D11Resource *textureResource = NULL;
+                colorBufferRTV->GetResource(&textureResource);
+                colorBufferRTV->Release();
+
+                if (textureResource)
+                {
+                    HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)resource);
+                    textureResource->Release();
+
+                    if (SUCCEEDED(result))
+                    {
+                        return true;
+                    }
+                    else
+                    {
+                        ERR("Failed to extract the ID3D11Texture2D from the render target resource, "
+                            "HRESULT: 0x%X.", result);
+                    }
+                }
+            }
+        }
+    }
+
+    return false;
+}
+
 bool Renderer11::blitRect(gl::Framebuffer *readTarget, gl::Rectangle *readRect, gl::Framebuffer *drawTarget, gl::Rectangle *drawRect,
                           bool blitRenderTarget, bool blitDepthStencil)
 {
@@ -2352,37 +2391,7 @@
     ID3D11Texture2D *colorBufferTexture = NULL;
     unsigned int subresourceIndex = 0;
 
-    gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
-    if (colorbuffer)
-    {
-        RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget());
-        if (renderTarget)
-        {
-            subresourceIndex = renderTarget->getSubresourceIndex();
-
-            ID3D11RenderTargetView *colorBufferRTV = renderTarget->getRenderTargetView();
-            if (colorBufferRTV)
-            {
-                ID3D11Resource *textureResource = NULL;
-                colorBufferRTV->GetResource(&textureResource);
-
-                if (textureResource)
-                {
-                    HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)&colorBufferTexture);
-                    textureResource->Release();
-
-                    if (FAILED(result))
-                    {
-                        ERR("Failed to extract the ID3D11Texture2D from the render target resource, "
-                            "HRESULT: 0x%X.", result);
-                        return;
-                    }
-                }
-            }
-        }
-    }
-
-    if (colorBufferTexture)
+    if (getRenderTargetResource(framebuffer, &subresourceIndex, &colorBufferTexture))
     {
         gl::Rectangle area;
         area.x = x;