summaryrefslogtreecommitdiffstats
path: root/ANGLE/src/libGLESv2/Renderbuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'ANGLE/src/libGLESv2/Renderbuffer.h')
-rw-r--r--ANGLE/src/libGLESv2/Renderbuffer.h123
1 files changed, 89 insertions, 34 deletions
diff --git a/ANGLE/src/libGLESv2/Renderbuffer.h b/ANGLE/src/libGLESv2/Renderbuffer.h
index 2c70ce9..cb8c06a 100644
--- a/ANGLE/src/libGLESv2/Renderbuffer.h
+++ b/ANGLE/src/libGLESv2/Renderbuffer.h
@@ -4,8 +4,9 @@
// found in the LICENSE file.
//
-// Renderbuffer.h: Defines the virtual gl::Renderbuffer class and its derived
-// classes Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
+// Renderbuffer.h: Defines the wrapper class gl::Renderbuffer, as well as the
+// class hierarchy used to store its contents: RenderbufferStorage, Colorbuffer,
+// DepthStencilbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
#ifndef LIBGLESV2_RENDERBUFFER_H_
@@ -16,26 +17,33 @@
#include <d3d9.h>
#include "common/angleutils.h"
+#include "libGLESv2/RefCountObject.h"
namespace gl
{
-class Renderbuffer
+
+// A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
+// is called. The specific concrete type depends on whether the internal format is
+// colour depth, stencil or packed depth/stencil.
+class RenderbufferStorage
{
public:
- Renderbuffer();
+ RenderbufferStorage();
- virtual ~Renderbuffer();
+ virtual ~RenderbufferStorage() = 0;
- virtual bool isColorbuffer();
- virtual bool isDepthbuffer();
- virtual bool isStencilbuffer();
+ virtual bool isColorbuffer() const;
+ virtual bool isDepthbuffer() const;
+ virtual bool isStencilbuffer() const;
virtual IDirect3DSurface9 *getRenderTarget();
virtual IDirect3DSurface9 *getDepthStencil();
- virtual int getWidth();
- virtual int getHeight();
- GLenum getFormat();
+ virtual int getWidth() const;
+ virtual int getHeight() const;
+ virtual GLenum getFormat() const;
+ D3DFORMAT getD3DFormat() const;
+ GLsizei getSamples() const;
unsigned int getSerial() const;
static unsigned int issueSerial();
@@ -43,10 +51,12 @@ class Renderbuffer
protected:
void setSize(int width, int height);
GLenum mFormat;
+ D3DFORMAT mD3DFormat;
+ GLsizei mSamples;
unsigned int mSerial;
private:
- DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
+ DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage);
static unsigned int mCurrentSerial;
@@ -54,20 +64,52 @@ class Renderbuffer
int mHeight;
};
-class Colorbuffer : public Renderbuffer
+// Renderbuffer implements the GL renderbuffer object.
+// It's only a wrapper for a RenderbufferStorage, but the internal object
+// can change whenever glRenderbufferStorage is called.
+class Renderbuffer : public RefCountObject
+{
+ public:
+ Renderbuffer(GLuint id, RenderbufferStorage *storage);
+
+ ~Renderbuffer();
+
+ bool isColorbuffer() const;
+ bool isDepthbuffer() const;
+ bool isStencilbuffer() const;
+
+ IDirect3DSurface9 *getRenderTarget();
+ IDirect3DSurface9 *getDepthStencil();
+
+ int getWidth() const;
+ int getHeight() const;
+ GLenum getFormat() const;
+ D3DFORMAT getD3DFormat() const;
+ unsigned int getSerial() const;
+
+ void setStorage(RenderbufferStorage *newStorage);
+ RenderbufferStorage *getStorage() { return mStorage; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
+
+ RenderbufferStorage *mStorage;
+};
+
+class Colorbuffer : public RenderbufferStorage
{
public:
explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
- Colorbuffer(int width, int height, GLenum format);
+ Colorbuffer(int width, int height, GLenum format, GLsizei samples);
~Colorbuffer();
- bool isColorbuffer();
+ bool isColorbuffer() const;
- GLuint getRedSize();
- GLuint getGreenSize();
- GLuint getBlueSize();
- GLuint getAlphaSize();
+ GLuint getRedSize() const;
+ GLuint getGreenSize() const;
+ GLuint getBlueSize() const;
+ GLuint getAlphaSize() const;
IDirect3DSurface9 *getRenderTarget();
@@ -78,42 +120,55 @@ class Colorbuffer : public Renderbuffer
DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
};
-class Depthbuffer : public Renderbuffer
+class DepthStencilbuffer : public RenderbufferStorage
{
public:
- explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
- Depthbuffer(int width, int height);
+ explicit DepthStencilbuffer(IDirect3DSurface9 *depthStencil);
+ DepthStencilbuffer(int width, int height, GLsizei samples);
- ~Depthbuffer();
+ ~DepthStencilbuffer();
- bool isDepthbuffer();
+ virtual bool isDepthbuffer() const;
+ virtual bool isStencilbuffer() const;
- GLuint getDepthSize();
+ GLuint getDepthSize() const;
+ GLuint getStencilSize() const;
IDirect3DSurface9 *getDepthStencil();
private:
- DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
+ DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer);
IDirect3DSurface9 *mDepthStencil;
};
-class Stencilbuffer : public Renderbuffer
+class Depthbuffer : public DepthStencilbuffer
{
public:
- explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
- Stencilbuffer(int width, int height);
+ explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
+ Depthbuffer(int width, int height, GLsizei samples);
- ~Stencilbuffer();
+ ~Depthbuffer();
+
+ bool isDepthbuffer() const;
+ bool isStencilbuffer() const;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
+};
- bool isStencilbuffer();
+class Stencilbuffer : public DepthStencilbuffer
+{
+ public:
+ explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
+ Stencilbuffer(int width, int height, GLsizei samples);
- GLuint getStencilSize();
+ ~Stencilbuffer();
- IDirect3DSurface9 *getDepthStencil();
+ bool isDepthbuffer() const;
+ bool isStencilbuffer() const;
private:
DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
- IDirect3DSurface9 *mDepthStencil;
};
}