Fixes places where TextureStorage could have leaked memory during initialization.

TRAC #22250 Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1661 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent b50d5302
......@@ -152,6 +152,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
ID3D11Texture2D *surfaceTexture = swapchain->getOffscreenTexture();
mTexture = surfaceTexture;
mSRV = NULL;
mRenderTarget = NULL;
D3D11_TEXTURE2D_DESC desc;
surfaceTexture->GetDesc(&desc);
......@@ -165,6 +166,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum
{
mTexture = NULL;
mSRV = NULL;
mRenderTarget = NULL;
DXGI_FORMAT format = gl_d3d11::ConvertTextureFormat(internalformat);
// if the width or height is not positive this should be treated as an incomplete texture
// we handle that here by skipping the d3d texture creation
......@@ -237,7 +239,7 @@ void TextureStorage11_2D::generateMipmap(int level)
void TextureStorage11_2D::initializeRenderTarget(DXGI_FORMAT format, int width, int height)
{
mRenderTarget = NULL;
ASSERT(mRenderTarget == NULL);
if (mTexture != NULL && isRenderTarget())
{
......@@ -299,6 +301,12 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLe
{
mTexture = NULL;
mSRV = NULL;
for (int i = 0; i < 6; ++i)
{
mRenderTarget[i] = NULL;
}
DXGI_FORMAT format = gl_d3d11::ConvertTextureFormat(internalformat);
// if the size is not positive this should be treated as an incomplete texture
// we handle that here by skipping the d3d texture creation
......@@ -372,11 +380,6 @@ void TextureStorage11_Cube::generateMipmap(int face, int level)
void TextureStorage11_Cube::initializeRenderTarget(DXGI_FORMAT format, int size)
{
for (int i = 0; i < 6; ++i)
{
mRenderTarget[i] = NULL;
}
if (mTexture != NULL && isRenderTarget())
{
if (getBindFlags() & D3D11_BIND_RENDER_TARGET)
......@@ -386,6 +389,7 @@ void TextureStorage11_Cube::initializeRenderTarget(DXGI_FORMAT format, int size)
for (int i = 0; i < 6; ++i)
{
ASSERT(mRenderTarget[i] == NULL);
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = format;
rtvDesc.Texture2DArray.MipSlice = 0;
......
......@@ -112,6 +112,7 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain
{
IDirect3DTexture9 *surfaceTexture = swapchain->getOffscreenTexture();
mTexture = surfaceTexture;
mRenderTarget = NULL;
initializeRenderTarget();
}
......@@ -120,6 +121,7 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int levels, GLenum in
: TextureStorage9(renderer, GetTextureUsage(Renderer9::makeRenderer9(renderer)->ConvertTextureInternalFormat(internalformat), usage, forceRenderable))
{
mTexture = NULL;
mRenderTarget = NULL;
// if the width or height is not positive this should be treated as an incomplete texture
// we handle that here by skipping the d3d texture creation
if (width > 0 && height > 0)
......@@ -202,22 +204,25 @@ IDirect3DBaseTexture9 *TextureStorage9_2D::getBaseTexture() const
void TextureStorage9_2D::initializeRenderTarget()
{
ASSERT(mRenderTarget == NULL);
if (mTexture != NULL && isRenderTarget())
{
IDirect3DSurface9 *surface = getSurfaceLevel(0, false);
mRenderTarget = new RenderTarget9(mRenderer, surface);
}
else
{
mRenderTarget = NULL;
}
}
TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage9(renderer, GetTextureUsage(Renderer9::makeRenderer9(renderer)->ConvertTextureInternalFormat(internalformat), usage, forceRenderable))
{
mTexture = NULL;
for (int i = 0; i < 6; ++i)
{
mRenderTarget[i] = NULL;
}
// if the size is not positive this should be treated as an incomplete texture
// we handle that here by skipping the d3d texture creation
if (size > 0)
......@@ -311,18 +316,13 @@ void TextureStorage9_Cube::initializeRenderTarget()
for (int i = 0; i < 6; ++i)
{
ASSERT(mRenderTarget[i] == NULL);
surface = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, false);
mRenderTarget[i] = new RenderTarget9(mRenderer, surface);
}
}
else
{
for (int i = 0; i < 6; ++i)
{
mRenderTarget[i] = NULL;
}
}
}
}
\ No newline at end of file
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