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;