Commit febbea88 by apatrick@chromium.org

Fixed leak of render target associated with ColorBuffer.

Following r853, I am assuming that any render target returned by FrameBuffer::getRenderTarget has to be released. Updating the usage of getRenderTarget to reflect that. This is not reproducible in Chrome at the moment but it will be once I start rendering to pbuffers. I ran the WebGL conformance tests. No regressions or crashes. Review URL: http://codereview.appspot.com/5451110 git-svn-id: https://angleproject.googlecode.com/svn/trunk@903 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent f4490e22
...@@ -2293,6 +2293,8 @@ void Context::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, ...@@ -2293,6 +2293,8 @@ void Context::readPixels(GLint x, GLint y, GLsizei width, GLsizei height,
result = mDevice->GetRenderTargetData(renderTarget, systemSurface); result = mDevice->GetRenderTargetData(renderTarget, systemSurface);
renderTarget->Release();
if (FAILED(result)) if (FAILED(result))
{ {
systemSurface->Release(); systemSurface->Release();
...@@ -2609,6 +2611,8 @@ void Context::clear(GLbitfield mask) ...@@ -2609,6 +2611,8 @@ void Context::clear(GLbitfield mask)
D3DSURFACE_DESC desc; D3DSURFACE_DESC desc;
renderTarget->GetDesc(&desc); renderTarget->GetDesc(&desc);
renderTarget->Release();
bool alphaUnmasked = (dx2es::GetAlphaSize(desc.Format) == 0) || mState.colorMaskAlpha; bool alphaUnmasked = (dx2es::GetAlphaSize(desc.Format) == 0) || mState.colorMaskAlpha;
const bool needMaskedStencilClear = (flags & D3DCLEAR_STENCIL) && const bool needMaskedStencilClear = (flags & D3DCLEAR_STENCIL) &&
...@@ -3791,8 +3795,14 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1 ...@@ -3791,8 +3795,14 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1
if (blitRenderTarget) if (blitRenderTarget)
{ {
HRESULT result = mDevice->StretchRect(readFramebuffer->getRenderTarget(), &sourceTrimmedRect, IDirect3DSurface9* readRenderTarget = readFramebuffer->getRenderTarget();
drawFramebuffer->getRenderTarget(), &destTrimmedRect, D3DTEXF_NONE); IDirect3DSurface9* drawRenderTarget = drawFramebuffer->getRenderTarget();
HRESULT result = mDevice->StretchRect(readRenderTarget, &sourceTrimmedRect,
drawRenderTarget, &destTrimmedRect, D3DTEXF_NONE);
readRenderTarget->Release();
drawRenderTarget->Release();
if (FAILED(result)) if (FAILED(result))
{ {
......
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