Refactor Renderer11::getRenderTargetResource to accept a gl::Renderbuffer…

Refactor Renderer11::getRenderTargetResource to accept a gl::Renderbuffer instead of a gl::Framebuffer. 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@2016 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent d6df671c
...@@ -278,13 +278,15 @@ void Image11::loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GL ...@@ -278,13 +278,15 @@ void Image11::loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GL
void Image11::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) void Image11::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source)
{ {
if (source->getReadColorbuffer() && source->getReadColorbuffer()->getActualFormat() == (GLuint)mActualFormat) gl::Renderbuffer *colorbuffer = source->getReadColorbuffer();
if (colorbuffer && colorbuffer->getActualFormat() == (GLuint)mActualFormat)
{ {
// No conversion needed-- use copyback fastpath // No conversion needed-- use copyback fastpath
ID3D11Texture2D *colorBufferTexture = NULL; ID3D11Texture2D *colorBufferTexture = NULL;
unsigned int subresourceIndex = 0; unsigned int subresourceIndex = 0;
if (mRenderer->getRenderTargetResource(source, &subresourceIndex, &colorBufferTexture)) if (mRenderer->getRenderTargetResource(colorbuffer, &subresourceIndex, &colorBufferTexture))
{ {
D3D11_TEXTURE2D_DESC textureDesc; D3D11_TEXTURE2D_DESC textureDesc;
colorBufferTexture->GetDesc(&textureDesc); colorBufferTexture->GetDesc(&textureDesc);
......
...@@ -2845,38 +2845,35 @@ FenceImpl *Renderer11::createFence() ...@@ -2845,38 +2845,35 @@ FenceImpl *Renderer11::createFence()
return new Fence11(this); return new Fence11(this);
} }
bool Renderer11::getRenderTargetResource(gl::Framebuffer *framebuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource) bool Renderer11::getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
{ {
// TODO: mrt supprt ASSERT(colorbuffer != NULL);
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
if (colorbuffer) RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget());
if (renderTarget)
{ {
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget()); *subresourceIndex = renderTarget->getSubresourceIndex();
if (renderTarget)
ID3D11RenderTargetView *colorBufferRTV = renderTarget->getRenderTargetView();
if (colorBufferRTV)
{ {
*subresourceIndex = renderTarget->getSubresourceIndex(); ID3D11Resource *textureResource = NULL;
colorBufferRTV->GetResource(&textureResource);
colorBufferRTV->Release();
ID3D11RenderTargetView *colorBufferRTV = renderTarget->getRenderTargetView(); if (textureResource)
if (colorBufferRTV)
{ {
ID3D11Resource *textureResource = NULL; HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)resource);
colorBufferRTV->GetResource(&textureResource); textureResource->Release();
colorBufferRTV->Release();
if (textureResource) if (SUCCEEDED(result))
{ {
HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)resource); return true;
textureResource->Release(); }
else
if (SUCCEEDED(result)) {
{ ERR("Failed to extract the ID3D11Texture2D from the render target resource, "
return true; "HRESULT: 0x%X.", result);
}
else
{
ERR("Failed to extract the ID3D11Texture2D from the render target resource, "
"HRESULT: 0x%X.", result);
}
} }
} }
} }
...@@ -2907,7 +2904,9 @@ void Renderer11::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsi ...@@ -2907,7 +2904,9 @@ void Renderer11::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsi
ID3D11Texture2D *colorBufferTexture = NULL; ID3D11Texture2D *colorBufferTexture = NULL;
unsigned int subresourceIndex = 0; unsigned int subresourceIndex = 0;
if (getRenderTargetResource(framebuffer, &subresourceIndex, &colorBufferTexture)) gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
if (colorbuffer && getRenderTargetResource(colorbuffer, &subresourceIndex, &colorBufferTexture))
{ {
gl::Rectangle area; gl::Rectangle area;
area.x = x; area.x = x;
......
...@@ -18,6 +18,11 @@ ...@@ -18,6 +18,11 @@
#include "libGLESv2/renderer/InputLayoutCache.h" #include "libGLESv2/renderer/InputLayoutCache.h"
#include "libGLESv2/renderer/RenderTarget.h" #include "libGLESv2/renderer/RenderTarget.h"
namespace gl
{
class Renderbuffer;
}
namespace rx namespace rx
{ {
...@@ -173,7 +178,7 @@ class Renderer11 : public Renderer ...@@ -173,7 +178,7 @@ class Renderer11 : public Renderer
ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; }; ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
IDXGIFactory *getDxgiFactory() { return mDxgiFactory; }; IDXGIFactory *getDxgiFactory() { return mDxgiFactory; };
bool getRenderTargetResource(gl::Framebuffer *framebuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource); bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
private: private:
DISALLOW_COPY_AND_ASSIGN(Renderer11); DISALLOW_COPY_AND_ASSIGN(Renderer11);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment