Fixed unsafe casting.

TRAC #16284 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@837 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 1a01e830
...@@ -183,44 +183,38 @@ unsigned int Framebuffer::getStencilbufferSerial() ...@@ -183,44 +183,38 @@ unsigned int Framebuffer::getStencilbufferSerial()
Colorbuffer *Framebuffer::getColorbuffer() Colorbuffer *Framebuffer::getColorbuffer()
{ {
Renderbuffer *rb = mColorbufferPointer.get(); Renderbuffer *renderbuffer = mColorbufferPointer.get();
if (rb != NULL && rb->isColorbuffer()) if (renderbuffer)
{ {
return static_cast<Colorbuffer*>(rb->getStorage()); return renderbuffer->getColorbuffer();
}
else
{
return NULL;
} }
return NULL;
} }
DepthStencilbuffer *Framebuffer::getDepthbuffer() DepthStencilbuffer *Framebuffer::getDepthbuffer()
{ {
Renderbuffer *rb = mDepthbufferPointer.get(); Renderbuffer *renderbuffer = mDepthbufferPointer.get();
if (rb != NULL && rb->isDepthbuffer()) if (renderbuffer)
{
return static_cast<DepthStencilbuffer*>(rb->getStorage());
}
else
{ {
return NULL; return renderbuffer->getDepthbuffer();
} }
return NULL;
} }
DepthStencilbuffer *Framebuffer::getStencilbuffer() DepthStencilbuffer *Framebuffer::getStencilbuffer()
{ {
Renderbuffer *rb = mStencilbufferPointer.get(); Renderbuffer *renderbuffer = mStencilbufferPointer.get();
if (rb != NULL && rb->isStencilbuffer()) if (renderbuffer)
{ {
return static_cast<DepthStencilbuffer*>(rb->getStorage()); return renderbuffer->getStencilbuffer();
}
else
{
return NULL;
} }
return NULL;
} }
GLenum Framebuffer::getColorbufferType() GLenum Framebuffer::getColorbufferType()
......
...@@ -29,19 +29,19 @@ Renderbuffer::~Renderbuffer() ...@@ -29,19 +29,19 @@ Renderbuffer::~Renderbuffer()
delete mStorage; delete mStorage;
} }
bool Renderbuffer::isColorbuffer() const Colorbuffer *Renderbuffer::getColorbuffer()
{ {
return mStorage->isColorbuffer(); return mStorage->getColorbuffer();
} }
bool Renderbuffer::isDepthbuffer() const DepthStencilbuffer *Renderbuffer::getDepthbuffer()
{ {
return mStorage->isDepthbuffer(); return mStorage->getDepthbuffer();
} }
bool Renderbuffer::isStencilbuffer() const DepthStencilbuffer *Renderbuffer::getStencilbuffer()
{ {
return mStorage->isStencilbuffer(); return mStorage->getStencilbuffer();
} }
IDirect3DSurface9 *Renderbuffer::getRenderTarget() IDirect3DSurface9 *Renderbuffer::getRenderTarget()
...@@ -130,19 +130,19 @@ RenderbufferStorage::~RenderbufferStorage() ...@@ -130,19 +130,19 @@ RenderbufferStorage::~RenderbufferStorage()
{ {
} }
bool RenderbufferStorage::isColorbuffer() const Colorbuffer *RenderbufferStorage::getColorbuffer()
{ {
return false; return NULL;
} }
bool RenderbufferStorage::isDepthbuffer() const DepthStencilbuffer *RenderbufferStorage::getDepthbuffer()
{ {
return false; return NULL;
} }
bool RenderbufferStorage::isStencilbuffer() const DepthStencilbuffer *RenderbufferStorage::getStencilbuffer()
{ {
return false; return NULL;
} }
IDirect3DSurface9 *RenderbufferStorage::getRenderTarget() IDirect3DSurface9 *RenderbufferStorage::getRenderTarget()
...@@ -345,9 +345,9 @@ D3DFORMAT Colorbuffer::getD3DFormat() const ...@@ -345,9 +345,9 @@ D3DFORMAT Colorbuffer::getD3DFormat() const
return mD3DFormat; return mD3DFormat;
} }
bool Colorbuffer::isColorbuffer() const Colorbuffer *Colorbuffer::getColorbuffer()
{ {
return true; return this;
} }
IDirect3DSurface9 *Colorbuffer::getRenderTarget() IDirect3DSurface9 *Colorbuffer::getRenderTarget()
...@@ -427,14 +427,14 @@ DepthStencilbuffer::~DepthStencilbuffer() ...@@ -427,14 +427,14 @@ DepthStencilbuffer::~DepthStencilbuffer()
} }
} }
bool DepthStencilbuffer::isDepthbuffer() const DepthStencilbuffer *DepthStencilbuffer::getDepthbuffer()
{ {
return true; return this;
} }
bool DepthStencilbuffer::isStencilbuffer() const DepthStencilbuffer *DepthStencilbuffer::getStencilbuffer()
{ {
return true; return this;
} }
IDirect3DSurface9 *DepthStencilbuffer::getDepthStencil() IDirect3DSurface9 *DepthStencilbuffer::getDepthStencil()
...@@ -466,14 +466,14 @@ Depthbuffer::~Depthbuffer() ...@@ -466,14 +466,14 @@ Depthbuffer::~Depthbuffer()
{ {
} }
bool Depthbuffer::isDepthbuffer() const DepthStencilbuffer *Depthbuffer::getDepthbuffer()
{ {
return true; return this;
} }
bool Depthbuffer::isStencilbuffer() const DepthStencilbuffer *Depthbuffer::getStencilbuffer()
{ {
return false; return NULL;
} }
Stencilbuffer::Stencilbuffer(IDirect3DSurface9 *depthStencil) : DepthStencilbuffer(depthStencil) Stencilbuffer::Stencilbuffer(IDirect3DSurface9 *depthStencil) : DepthStencilbuffer(depthStencil)
...@@ -500,13 +500,13 @@ Stencilbuffer::~Stencilbuffer() ...@@ -500,13 +500,13 @@ Stencilbuffer::~Stencilbuffer()
{ {
} }
bool Stencilbuffer::isDepthbuffer() const DepthStencilbuffer *Stencilbuffer::getDepthbuffer()
{ {
return false; return NULL;
} }
bool Stencilbuffer::isStencilbuffer() const DepthStencilbuffer *Stencilbuffer::getStencilbuffer()
{ {
return true; return this;
} }
} }
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
namespace gl namespace gl
{ {
class Texture; class Texture;
class Colorbuffer;
class DepthStencilbuffer;
// A class derived from RenderbufferStorage is created whenever glRenderbufferStorage // A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
// is called. The specific concrete type depends on whether the internal format is // is called. The specific concrete type depends on whether the internal format is
...@@ -33,9 +35,9 @@ class RenderbufferStorage ...@@ -33,9 +35,9 @@ class RenderbufferStorage
virtual ~RenderbufferStorage() = 0; virtual ~RenderbufferStorage() = 0;
virtual bool isColorbuffer() const; virtual Colorbuffer *getColorbuffer();
virtual bool isDepthbuffer() const; virtual DepthStencilbuffer *getDepthbuffer();
virtual bool isStencilbuffer() const; virtual DepthStencilbuffer *getStencilbuffer();
virtual IDirect3DSurface9 *getRenderTarget(); virtual IDirect3DSurface9 *getRenderTarget();
virtual IDirect3DSurface9 *getDepthStencil(); virtual IDirect3DSurface9 *getDepthStencil();
...@@ -82,9 +84,9 @@ class Renderbuffer : public RefCountObject ...@@ -82,9 +84,9 @@ class Renderbuffer : public RefCountObject
~Renderbuffer(); ~Renderbuffer();
bool isColorbuffer() const; Colorbuffer *getColorbuffer();
bool isDepthbuffer() const; DepthStencilbuffer *getDepthbuffer();
bool isStencilbuffer() const; DepthStencilbuffer *getStencilbuffer();
IDirect3DSurface9 *getRenderTarget(); IDirect3DSurface9 *getRenderTarget();
IDirect3DSurface9 *getDepthStencil(); IDirect3DSurface9 *getDepthStencil();
...@@ -121,7 +123,7 @@ class Colorbuffer : public RenderbufferStorage ...@@ -121,7 +123,7 @@ class Colorbuffer : public RenderbufferStorage
virtual ~Colorbuffer(); virtual ~Colorbuffer();
virtual bool isColorbuffer() const; virtual Colorbuffer *getColorbuffer();
virtual IDirect3DSurface9 *getRenderTarget(); virtual IDirect3DSurface9 *getRenderTarget();
...@@ -148,8 +150,8 @@ class DepthStencilbuffer : public RenderbufferStorage ...@@ -148,8 +150,8 @@ class DepthStencilbuffer : public RenderbufferStorage
~DepthStencilbuffer(); ~DepthStencilbuffer();
virtual bool isDepthbuffer() const; virtual DepthStencilbuffer *getDepthbuffer();
virtual bool isStencilbuffer() const; virtual DepthStencilbuffer *getStencilbuffer();
virtual IDirect3DSurface9 *getDepthStencil(); virtual IDirect3DSurface9 *getDepthStencil();
...@@ -166,8 +168,8 @@ class Depthbuffer : public DepthStencilbuffer ...@@ -166,8 +168,8 @@ class Depthbuffer : public DepthStencilbuffer
virtual ~Depthbuffer(); virtual ~Depthbuffer();
virtual bool isDepthbuffer() const; virtual DepthStencilbuffer *getDepthbuffer();
virtual bool isStencilbuffer() const; virtual DepthStencilbuffer *getStencilbuffer();
private: private:
DISALLOW_COPY_AND_ASSIGN(Depthbuffer); DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
...@@ -181,8 +183,8 @@ class Stencilbuffer : public DepthStencilbuffer ...@@ -181,8 +183,8 @@ class Stencilbuffer : public DepthStencilbuffer
virtual ~Stencilbuffer(); virtual ~Stencilbuffer();
virtual bool isDepthbuffer() const; virtual DepthStencilbuffer *getDepthbuffer();
virtual bool isStencilbuffer() const; virtual DepthStencilbuffer *getStencilbuffer();
private: private:
DISALLOW_COPY_AND_ASSIGN(Stencilbuffer); DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
......
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