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
diff --git a/src/libGLESv2/Framebuffer.cpp b/src/libGLESv2/Framebuffer.cpp
index 3858e26..ffba05e 100644
--- a/src/libGLESv2/Framebuffer.cpp
+++ b/src/libGLESv2/Framebuffer.cpp
@@ -183,44 +183,38 @@
 
 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()
 {
-    Renderbuffer *rb = mDepthbufferPointer.get();
+    Renderbuffer *renderbuffer = mDepthbufferPointer.get();
 
-    if (rb != NULL && rb->isDepthbuffer())
+    if (renderbuffer)
     {
-        return static_cast<DepthStencilbuffer*>(rb->getStorage());
+        return renderbuffer->getDepthbuffer();
     }
-    else
-    {
-        return NULL;
-    }
+
+    return NULL;
 }
 
 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()
diff --git a/src/libGLESv2/Renderbuffer.cpp b/src/libGLESv2/Renderbuffer.cpp
index ace8d7b..ae252ec 100644
--- a/src/libGLESv2/Renderbuffer.cpp
+++ b/src/libGLESv2/Renderbuffer.cpp
@@ -29,19 +29,19 @@
     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()
@@ -130,19 +130,19 @@
 {
 }
 
-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()
@@ -345,9 +345,9 @@
     return mD3DFormat;
 }
 
-bool Colorbuffer::isColorbuffer() const
+Colorbuffer *Colorbuffer::getColorbuffer()
 {
-    return true;
+    return this;
 }
 
 IDirect3DSurface9 *Colorbuffer::getRenderTarget()
@@ -427,14 +427,14 @@
     }
 }
 
-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()
@@ -466,14 +466,14 @@
 {
 }
 
-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)
@@ -500,13 +500,13 @@
 {
 }
 
-bool Stencilbuffer::isDepthbuffer() const
+DepthStencilbuffer *Stencilbuffer::getDepthbuffer()
 {
-    return false;
+    return NULL;
 }
 
-bool Stencilbuffer::isStencilbuffer() const
+DepthStencilbuffer *Stencilbuffer::getStencilbuffer()
 {
-    return true;
+    return this;
 }
 }
diff --git a/src/libGLESv2/Renderbuffer.h b/src/libGLESv2/Renderbuffer.h
index 5cf829c..493f98a 100644
--- a/src/libGLESv2/Renderbuffer.h
+++ b/src/libGLESv2/Renderbuffer.h
@@ -22,6 +22,8 @@
 namespace gl
 {
 class Texture;
+class Colorbuffer;
+class DepthStencilbuffer;
 
 // A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
 // is called. The specific concrete type depends on whether the internal format is
@@ -33,9 +35,9 @@
 
     virtual ~RenderbufferStorage() = 0;
 
-    virtual bool isColorbuffer() const;
-    virtual bool isDepthbuffer() const;
-    virtual bool isStencilbuffer() const;
+    virtual Colorbuffer *getColorbuffer();
+    virtual DepthStencilbuffer *getDepthbuffer();
+    virtual DepthStencilbuffer *getStencilbuffer();
 
     virtual IDirect3DSurface9 *getRenderTarget();
     virtual IDirect3DSurface9 *getDepthStencil();
@@ -82,9 +84,9 @@
 
     ~Renderbuffer();
 
-    bool isColorbuffer() const;
-    bool isDepthbuffer() const;
-    bool isStencilbuffer() const;
+    Colorbuffer *getColorbuffer();
+    DepthStencilbuffer *getDepthbuffer();
+    DepthStencilbuffer *getStencilbuffer();
 
     IDirect3DSurface9 *getRenderTarget();
     IDirect3DSurface9 *getDepthStencil();
@@ -121,7 +123,7 @@
 
     virtual ~Colorbuffer();
 
-    virtual bool isColorbuffer() const;
+    virtual Colorbuffer *getColorbuffer();
 
     virtual IDirect3DSurface9 *getRenderTarget();
 
@@ -148,8 +150,8 @@
 
     ~DepthStencilbuffer();
 
-    virtual bool isDepthbuffer() const;
-    virtual bool isStencilbuffer() const;
+    virtual DepthStencilbuffer *getDepthbuffer();
+    virtual DepthStencilbuffer *getStencilbuffer();
 
     virtual IDirect3DSurface9 *getDepthStencil();
 
@@ -166,8 +168,8 @@
 
     virtual ~Depthbuffer();
 
-    virtual bool isDepthbuffer() const;
-    virtual bool isStencilbuffer() const;
+    virtual DepthStencilbuffer *getDepthbuffer();
+    virtual DepthStencilbuffer *getStencilbuffer();
 
   private:
     DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
@@ -181,8 +183,8 @@
 
     virtual ~Stencilbuffer();
 
-    virtual bool isDepthbuffer() const;
-    virtual bool isStencilbuffer() const;
+    virtual DepthStencilbuffer *getDepthbuffer();
+    virtual DepthStencilbuffer *getStencilbuffer();
 
   private:
     DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);