TextureColorbufferProxy must query the texture to get the latest width & height.

TRAC #12372 Signed-off-by: Daniel Koch Author: Andrew Lewycky git-svn-id: https://angleproject.googlecode.com/svn/trunk@315 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 81655a72
......@@ -64,6 +64,13 @@ int Renderbuffer::getHeight()
return mHeight;
}
void Renderbuffer::setSize(int width, int height)
{
mWidth = width;
mHeight = height;
}
GLenum Renderbuffer::getFormat()
{
return mFormat;
......@@ -88,8 +95,7 @@ Colorbuffer::Colorbuffer(IDirect3DSurface9 *renderTarget) : mRenderTarget(render
D3DSURFACE_DESC description;
renderTarget->GetDesc(&description);
mWidth = description.Width;
mHeight = description.Height;
setSize(description.Width, description.Height);
}
}
......@@ -113,14 +119,12 @@ Colorbuffer::Colorbuffer(int width, int height, GLenum format)
if (mRenderTarget)
{
mWidth = width;
mHeight = height;
setSize(width, height);
mFormat = format;
}
else
{
mWidth = 0;
mHeight = 0;
setSize(0, 0);
mFormat = GL_RGBA4;
}
}
......@@ -204,8 +208,7 @@ Depthbuffer::Depthbuffer(IDirect3DSurface9 *depthStencil) : mDepthStencil(depthS
D3DSURFACE_DESC description;
depthStencil->GetDesc(&description);
mWidth = description.Width;
mHeight = description.Height;
setSize(description.Width, description.Height);
mFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
// glRenderbufferStorage
......@@ -230,16 +233,14 @@ Depthbuffer::Depthbuffer(int width, int height)
if (mDepthStencil)
{
mWidth = width;
mHeight = height;
setSize(width, height);
mFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
// glRenderbufferStorage
}
else
{
mWidth = 0;
mHeight = 0;
setSize(0, 0);
mFormat = GL_RGBA4; //default format
}
}
......@@ -284,8 +285,7 @@ Stencilbuffer::Stencilbuffer(IDirect3DSurface9 *depthStencil) : mDepthStencil(de
D3DSURFACE_DESC description;
depthStencil->GetDesc(&description);
mWidth = description.Width;
mHeight = description.Height;
setSize(description.Width, description.Height);
mFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
// glRenderbufferStorage
......@@ -310,16 +310,14 @@ Stencilbuffer::Stencilbuffer(int width, int height)
if (mDepthStencil)
{
mWidth = width;
mHeight = height;
setSize(width, height);
mFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
// will expect one of the valid renderbuffer formats for use in
// glRenderbufferStorage
}
else
{
mWidth = 0;
mHeight = 0;
setSize(0, 0);
mFormat = GL_RGBA4; //default format
}
}
......
......@@ -33,16 +33,15 @@ class Renderbuffer
virtual IDirect3DSurface9 *getRenderTarget();
virtual IDirect3DSurface9 *getDepthStencil();
int getWidth();
int getHeight();
virtual int getWidth();
virtual int getHeight();
GLenum getFormat();
unsigned int getSerial() const;
static unsigned int issueSerial();
protected:
int mWidth;
int mHeight;
void setSize(int width, int height);
GLenum mFormat;
unsigned int mSerial;
......@@ -50,6 +49,9 @@ class Renderbuffer
DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
static unsigned int mCurrentSerial;
int mWidth;
int mHeight;
};
class Colorbuffer : public Renderbuffer
......
......@@ -1468,13 +1468,10 @@ Texture::TextureColorbufferProxy::TextureColorbufferProxy(Texture *texture, GLen
: Colorbuffer(NULL), mTexture(texture), mTarget(target)
{
ASSERT(target == GL_TEXTURE_2D || IsCubemapTextureTarget(target));
latchTextureInfo();
}
IDirect3DSurface9 *Texture::TextureColorbufferProxy::getRenderTarget()
{
latchTextureInfo();
if (mRenderTarget) mRenderTarget->Release();
mRenderTarget = mTexture->getRenderTarget(mTarget);
......@@ -1482,10 +1479,14 @@ IDirect3DSurface9 *Texture::TextureColorbufferProxy::getRenderTarget()
return mRenderTarget;
}
void Texture::TextureColorbufferProxy::latchTextureInfo()
int Texture::TextureColorbufferProxy::getWidth()
{
return mTexture->getWidth();
}
int Texture::TextureColorbufferProxy::getHeight()
{
mWidth = mTexture->getWidth();
mHeight = mTexture->getHeight();
return mTexture->getHeight();
}
}
......@@ -76,11 +76,12 @@ class Texture
virtual IDirect3DSurface9 *getRenderTarget();
virtual int getWidth();
virtual int getHeight();
private:
Texture *mTexture;
GLenum mTarget;
void latchTextureInfo();
};
// Helper structure representing a single image layer
......
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