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
parent 7d4b482a
...@@ -2338,51 +2338,60 @@ IndexBuffer *Renderer11::createIndexBuffer() ...@@ -2338,51 +2338,60 @@ IndexBuffer *Renderer11::createIndexBuffer()
return new IndexBuffer11(this); return new IndexBuffer11(this);
} }
bool Renderer11::blitRect(gl::Framebuffer *readTarget, gl::Rectangle *readRect, gl::Framebuffer *drawTarget, gl::Rectangle *drawRect, bool Renderer11::getRenderTargetResource(gl::Framebuffer *framebuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
bool blitRenderTarget, bool blitDepthStencil)
{
// TODO
UNIMPLEMENTED();
return false;
}
void Renderer11::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
GLsizei outputPitch, bool packReverseRowOrder, GLint packAlignment, void* pixels)
{ {
ID3D11Texture2D *colorBufferTexture = NULL;
unsigned int subresourceIndex = 0;
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(); gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
if (colorbuffer) if (colorbuffer)
{ {
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget()); RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget());
if (renderTarget) if (renderTarget)
{ {
subresourceIndex = renderTarget->getSubresourceIndex(); *subresourceIndex = renderTarget->getSubresourceIndex();
ID3D11RenderTargetView *colorBufferRTV = renderTarget->getRenderTargetView(); ID3D11RenderTargetView *colorBufferRTV = renderTarget->getRenderTargetView();
if (colorBufferRTV) if (colorBufferRTV)
{ {
ID3D11Resource *textureResource = NULL; ID3D11Resource *textureResource = NULL;
colorBufferRTV->GetResource(&textureResource); colorBufferRTV->GetResource(&textureResource);
colorBufferRTV->Release();
if (textureResource) if (textureResource)
{ {
HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)&colorBufferTexture); HRESULT result = textureResource->QueryInterface(IID_ID3D11Texture2D, (void**)resource);
textureResource->Release(); textureResource->Release();
if (FAILED(result)) if (SUCCEEDED(result))
{
return true;
}
else
{ {
ERR("Failed to extract the ID3D11Texture2D from the render target resource, " ERR("Failed to extract the ID3D11Texture2D from the render target resource, "
"HRESULT: 0x%X.", result); "HRESULT: 0x%X.", result);
return;
} }
} }
} }
} }
} }
if (colorBufferTexture) return false;
}
bool Renderer11::blitRect(gl::Framebuffer *readTarget, gl::Rectangle *readRect, gl::Framebuffer *drawTarget, gl::Rectangle *drawRect,
bool blitRenderTarget, bool blitDepthStencil)
{
// TODO
UNIMPLEMENTED();
return false;
}
void Renderer11::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
GLsizei outputPitch, bool packReverseRowOrder, GLint packAlignment, void* pixels)
{
ID3D11Texture2D *colorBufferTexture = NULL;
unsigned int subresourceIndex = 0;
if (getRenderTargetResource(framebuffer, &subresourceIndex, &colorBufferTexture))
{ {
gl::Rectangle area; gl::Rectangle area;
area.x = x; area.x = x;
......
...@@ -158,6 +158,8 @@ class Renderer11 : public Renderer ...@@ -158,6 +158,8 @@ 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);
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