Split RenderbufferTexture into 2D and CubeMap specific variants

Issue=306 Signed-off-by: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@1078 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent bf6e5d4d
...@@ -63,68 +63,136 @@ GLuint RenderbufferInterface::getStencilSize() const ...@@ -63,68 +63,136 @@ GLuint RenderbufferInterface::getStencilSize() const
return dx2es::GetStencilSize(getD3DFormat()); return dx2es::GetStencilSize(getD3DFormat());
} }
RenderbufferTexture::RenderbufferTexture(Texture *texture, GLenum target) : mTarget(target) ///// RenderbufferTexture2D Implementation ////////
RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLenum target) : mTarget(target)
{ {
mTexture.set(texture); mTexture2D.set(texture);
} }
RenderbufferTexture::~RenderbufferTexture() RenderbufferTexture2D::~RenderbufferTexture2D()
{ {
mTexture.set(NULL); mTexture2D.set(NULL);
} }
// Textures need to maintain their own reference count for references via // Textures need to maintain their own reference count for references via
// Renderbuffers acting as proxies. Here, we notify the texture of a reference. // Renderbuffers acting as proxies. Here, we notify the texture of a reference.
void RenderbufferTexture::addProxyRef(const Renderbuffer *proxy) void RenderbufferTexture2D::addProxyRef(const Renderbuffer *proxy)
{ {
mTexture->addProxyRef(proxy); mTexture2D->addProxyRef(proxy);
} }
void RenderbufferTexture::releaseProxy(const Renderbuffer *proxy) void RenderbufferTexture2D::releaseProxy(const Renderbuffer *proxy)
{ {
mTexture->releaseProxy(proxy); mTexture2D->releaseProxy(proxy);
} }
IDirect3DSurface9 *RenderbufferTexture::getRenderTarget() IDirect3DSurface9 *RenderbufferTexture2D::getRenderTarget()
{ {
return mTexture->getRenderTarget(mTarget); return mTexture2D->getRenderTarget(mTarget);
} }
IDirect3DSurface9 *RenderbufferTexture::getDepthStencil() IDirect3DSurface9 *RenderbufferTexture2D::getDepthStencil()
{ {
return NULL; return NULL;
} }
GLsizei RenderbufferTexture::getWidth() const GLsizei RenderbufferTexture2D::getWidth() const
{ {
return mTexture->getWidth(0); return mTexture2D->getWidth(0);
} }
GLsizei RenderbufferTexture::getHeight() const GLsizei RenderbufferTexture2D::getHeight() const
{ {
return mTexture->getHeight(0); return mTexture2D->getHeight(0);
} }
GLenum RenderbufferTexture::getInternalFormat() const GLenum RenderbufferTexture2D::getInternalFormat() const
{ {
return mTexture->getInternalFormat(); return mTexture2D->getInternalFormat();
} }
D3DFORMAT RenderbufferTexture::getD3DFormat() const D3DFORMAT RenderbufferTexture2D::getD3DFormat() const
{ {
return mTexture->getD3DFormat(); return mTexture2D->getD3DFormat();
} }
GLsizei RenderbufferTexture::getSamples() const GLsizei RenderbufferTexture2D::getSamples() const
{ {
return 0; return 0;
} }
unsigned int RenderbufferTexture::getSerial() const unsigned int RenderbufferTexture2D::getSerial() const
{
return mTexture2D->getRenderTargetSerial(mTarget);
}
///// RenderbufferTextureCubeMap Implementation ////////
RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
{
mTextureCubeMap.set(texture);
}
RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
{ {
return mTexture->getRenderTargetSerial(mTarget); mTextureCubeMap.set(NULL);
} }
// Textures need to maintain their own reference count for references via
// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
{
mTextureCubeMap->addProxyRef(proxy);
}
void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
{
mTextureCubeMap->releaseProxy(proxy);
}
IDirect3DSurface9 *RenderbufferTextureCubeMap::getRenderTarget()
{
return mTextureCubeMap->getRenderTarget(mTarget);
}
IDirect3DSurface9 *RenderbufferTextureCubeMap::getDepthStencil()
{
return NULL;
}
GLsizei RenderbufferTextureCubeMap::getWidth() const
{
return mTextureCubeMap->getWidth(0);
}
GLsizei RenderbufferTextureCubeMap::getHeight() const
{
return mTextureCubeMap->getHeight(0);
}
GLenum RenderbufferTextureCubeMap::getInternalFormat() const
{
return mTextureCubeMap->getInternalFormat();
}
D3DFORMAT RenderbufferTextureCubeMap::getD3DFormat() const
{
return mTextureCubeMap->getD3DFormat();
}
GLsizei RenderbufferTextureCubeMap::getSamples() const
{
return 0;
}
unsigned int RenderbufferTextureCubeMap::getSerial() const
{
return mTextureCubeMap->getRenderTargetSerial(mTarget);
}
////// Renderbuffer Implementation //////
Renderbuffer::Renderbuffer(GLuint id, RenderbufferInterface *instance) : RefCountObject(id) Renderbuffer::Renderbuffer(GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
{ {
ASSERT(instance != NULL); ASSERT(instance != NULL);
......
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
namespace gl namespace gl
{ {
class Texture; class Texture2D;
class TextureCubeMap;
class Renderbuffer; class Renderbuffer;
class Colorbuffer; class Colorbuffer;
class DepthStencilbuffer; class DepthStencilbuffer;
...@@ -58,12 +59,12 @@ class RenderbufferInterface ...@@ -58,12 +59,12 @@ class RenderbufferInterface
DISALLOW_COPY_AND_ASSIGN(RenderbufferInterface); DISALLOW_COPY_AND_ASSIGN(RenderbufferInterface);
}; };
class RenderbufferTexture : public RenderbufferInterface class RenderbufferTexture2D : public RenderbufferInterface
{ {
public: public:
RenderbufferTexture(Texture *texture, GLenum target); RenderbufferTexture2D(Texture2D *texture, GLenum target);
virtual ~RenderbufferTexture(); virtual ~RenderbufferTexture2D();
void addProxyRef(const Renderbuffer *proxy); void addProxyRef(const Renderbuffer *proxy);
void releaseProxy(const Renderbuffer *proxy); void releaseProxy(const Renderbuffer *proxy);
...@@ -80,9 +81,37 @@ class RenderbufferTexture : public RenderbufferInterface ...@@ -80,9 +81,37 @@ class RenderbufferTexture : public RenderbufferInterface
virtual unsigned int getSerial() const; virtual unsigned int getSerial() const;
private: private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture); DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture2D);
BindingPointer <Texture> mTexture; BindingPointer <Texture2D> mTexture2D;
GLenum mTarget;
};
class RenderbufferTextureCubeMap : public RenderbufferInterface
{
public:
RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target);
virtual ~RenderbufferTextureCubeMap();
void addProxyRef(const Renderbuffer *proxy);
void releaseProxy(const Renderbuffer *proxy);
IDirect3DSurface9 *getRenderTarget();
IDirect3DSurface9 *getDepthStencil();
virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const;
virtual GLenum getInternalFormat() const;
virtual D3DFORMAT getD3DFormat() const;
virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTextureCubeMap);
BindingPointer <TextureCubeMap> mTextureCubeMap;
GLenum mTarget; GLenum mTarget;
}; };
......
...@@ -2334,7 +2334,7 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target) ...@@ -2334,7 +2334,7 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target)
if (mColorbufferProxy == NULL) if (mColorbufferProxy == NULL)
{ {
mColorbufferProxy = new Renderbuffer(id(), new RenderbufferTexture(this, target)); mColorbufferProxy = new Renderbuffer(id(), new RenderbufferTexture2D(this, target));
} }
return mColorbufferProxy; return mColorbufferProxy;
...@@ -3067,7 +3067,7 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target) ...@@ -3067,7 +3067,7 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target)
if (mFaceProxies[face] == NULL) if (mFaceProxies[face] == NULL)
{ {
mFaceProxies[face] = new Renderbuffer(id(), new RenderbufferTexture(this, target)); mFaceProxies[face] = new Renderbuffer(id(), new RenderbufferTextureCubeMap(this, target));
} }
return mFaceProxies[face]; return mFaceProxies[face];
......
...@@ -217,8 +217,6 @@ class Texture : public RefCountObject ...@@ -217,8 +217,6 @@ class Texture : public RefCountObject
static const GLuint INCOMPLETE_TEXTURE_ID = static_cast<GLuint>(-1); // Every texture takes an id at creation time. The value is arbitrary because it is never registered with the resource manager. static const GLuint INCOMPLETE_TEXTURE_ID = static_cast<GLuint>(-1); // Every texture takes an id at creation time. The value is arbitrary because it is never registered with the resource manager.
protected: protected:
friend class RenderbufferTexture;
void setImage(GLint unpackAlignment, const void *pixels, Image *image); void setImage(GLint unpackAlignment, const void *pixels, Image *image);
bool subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image); bool subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image);
void setCompressedImage(GLsizei imageSize, const void *pixels, Image *image); void setCompressedImage(GLsizei imageSize, const void *pixels, Image *image);
...@@ -309,6 +307,10 @@ class Texture2D : public Texture ...@@ -309,6 +307,10 @@ class Texture2D : public Texture
virtual Renderbuffer *getRenderbuffer(GLenum target); virtual Renderbuffer *getRenderbuffer(GLenum target);
protected:
friend class RenderbufferTexture2D;
virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
private: private:
DISALLOW_COPY_AND_ASSIGN(Texture2D); DISALLOW_COPY_AND_ASSIGN(Texture2D);
...@@ -316,7 +318,6 @@ class Texture2D : public Texture ...@@ -316,7 +318,6 @@ class Texture2D : public Texture
virtual void createTexture(); virtual void createTexture();
virtual void updateTexture(); virtual void updateTexture();
virtual void convertToRenderTarget(); virtual void convertToRenderTarget();
virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
virtual TextureStorage *getStorage(bool renderTarget); virtual TextureStorage *getStorage(bool renderTarget);
bool isMipmapComplete() const; bool isMipmapComplete() const;
...@@ -398,6 +399,10 @@ class TextureCubeMap : public Texture ...@@ -398,6 +399,10 @@ class TextureCubeMap : public Texture
static unsigned int faceIndex(GLenum face); static unsigned int faceIndex(GLenum face);
protected:
friend class RenderbufferTextureCubeMap;
virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureCubeMap); DISALLOW_COPY_AND_ASSIGN(TextureCubeMap);
...@@ -405,7 +410,6 @@ class TextureCubeMap : public Texture ...@@ -405,7 +410,6 @@ class TextureCubeMap : public Texture
virtual void createTexture(); virtual void createTexture();
virtual void updateTexture(); virtual void updateTexture();
virtual void convertToRenderTarget(); virtual void convertToRenderTarget();
virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
virtual TextureStorage *getStorage(bool renderTarget); virtual TextureStorage *getStorage(bool renderTarget);
bool isCubeComplete() const; bool isCubeComplete() const;
......
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