Ensure all getDepthStencil and getRenderTarget calls consistently handle references to the underlying d3d surfaces
Trac #20875
Signed-off-by: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@1114 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Renderbuffer.cpp b/src/libGLESv2/Renderbuffer.cpp
index f251b55..f5abd9d 100644
--- a/src/libGLESv2/Renderbuffer.cpp
+++ b/src/libGLESv2/Renderbuffer.cpp
@@ -87,11 +87,15 @@
mTexture2D->releaseProxy(proxy);
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *RenderbufferTexture2D::getRenderTarget()
{
return mTexture2D->getRenderTarget(mTarget);
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *RenderbufferTexture2D::getDepthStencil()
{
return NULL;
@@ -151,11 +155,15 @@
mTextureCubeMap->releaseProxy(proxy);
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *RenderbufferTextureCubeMap::getRenderTarget()
{
return mTextureCubeMap->getRenderTarget(mTarget);
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *RenderbufferTextureCubeMap::getDepthStencil()
{
return NULL;
@@ -220,11 +228,15 @@
RefCountObject::release();
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *Renderbuffer::getRenderTarget()
{
return mInstance->getRenderTarget();
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *Renderbuffer::getDepthStencil()
{
return mInstance->getDepthStencil();
@@ -311,11 +323,15 @@
{
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *RenderbufferStorage::getRenderTarget()
{
return NULL;
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *RenderbufferStorage::getDepthStencil()
{
return NULL;
@@ -424,6 +440,8 @@
}
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *Colorbuffer::getRenderTarget()
{
if (mRenderTarget)
@@ -496,8 +514,15 @@
}
}
+// Increments refcount on surface.
+// caller must Release() the returned surface
IDirect3DSurface9 *DepthStencilbuffer::getDepthStencil()
{
+ if (mDepthStencil)
+ {
+ mDepthStencil->AddRef();
+ }
+
return mDepthStencil;
}