diff options
Diffstat (limited to 'ANGLE/src/libGLESv2/Renderbuffer.h')
-rw-r--r-- | ANGLE/src/libGLESv2/Renderbuffer.h | 123 |
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; }; } |