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
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 0de524a..629ca0f 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -2293,6 +2293,8 @@
result = mDevice->GetRenderTargetData(renderTarget, systemSurface);
+ renderTarget->Release();
+
if (FAILED(result))
{
systemSurface->Release();
@@ -2609,6 +2611,8 @@
D3DSURFACE_DESC desc;
renderTarget->GetDesc(&desc);
+ renderTarget->Release();
+
bool alphaUnmasked = (dx2es::GetAlphaSize(desc.Format) == 0) || mState.colorMaskAlpha;
const bool needMaskedStencilClear = (flags & D3DCLEAR_STENCIL) &&
@@ -3791,8 +3795,14 @@
if (blitRenderTarget)
{
- HRESULT result = mDevice->StretchRect(readFramebuffer->getRenderTarget(), &sourceTrimmedRect,
- drawFramebuffer->getRenderTarget(), &destTrimmedRect, D3DTEXF_NONE);
+ IDirect3DSurface9* readRenderTarget = readFramebuffer->getRenderTarget();
+ IDirect3DSurface9* drawRenderTarget = drawFramebuffer->getRenderTarget();
+
+ HRESULT result = mDevice->StretchRect(readRenderTarget, &sourceTrimmedRect,
+ drawRenderTarget, &destTrimmedRect, D3DTEXF_NONE);
+
+ readRenderTarget->Release();
+ drawRenderTarget->Release();
if (FAILED(result))
{