diff options
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/libGLESv2/Renderbuffer.h')
-rw-r--r-- | Source/ThirdParty/ANGLE/src/libGLESv2/Renderbuffer.h | 176 |
1 files changed, 113 insertions, 63 deletions
diff --git a/Source/ThirdParty/ANGLE/src/libGLESv2/Renderbuffer.h b/Source/ThirdParty/ANGLE/src/libGLESv2/Renderbuffer.h index 98510c2..60ec058 100644 --- a/Source/ThirdParty/ANGLE/src/libGLESv2/Renderbuffer.h +++ b/Source/ThirdParty/ANGLE/src/libGLESv2/Renderbuffer.h @@ -17,143 +17,196 @@ #include <d3d9.h> #include "common/angleutils.h" -#include "libGLESv2/RefCountObject.h" +#include "common/RefCountObject.h" namespace gl { - class Texture; +class Texture; +class Renderbuffer; +class Colorbuffer; +class DepthStencilbuffer; + +class RenderbufferInterface +{ + public: + RenderbufferInterface(); + + virtual ~RenderbufferInterface() {}; + + virtual void addProxyRef(const Renderbuffer *proxy); + virtual void releaseProxy(const Renderbuffer *proxy); + + virtual IDirect3DSurface9 *getRenderTarget() = 0; + virtual IDirect3DSurface9 *getDepthStencil() = 0; + + virtual GLsizei getWidth() const = 0; + virtual GLsizei getHeight() const = 0; + virtual GLenum getInternalFormat() const = 0; + virtual D3DFORMAT getD3DFormat() const = 0; + virtual GLsizei getSamples() const = 0; + + GLuint getRedSize() const; + GLuint getGreenSize() const; + GLuint getBlueSize() const; + GLuint getAlphaSize() const; + GLuint getDepthSize() const; + GLuint getStencilSize() const; + + virtual unsigned int getSerial() const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(RenderbufferInterface); +}; + +class RenderbufferTexture : public RenderbufferInterface +{ + public: + RenderbufferTexture(Texture *texture, GLenum target); + + virtual ~RenderbufferTexture(); + + 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(RenderbufferTexture); + + BindingPointer <Texture> mTexture; + GLenum mTarget; +}; // 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 +class RenderbufferStorage : public RenderbufferInterface { public: RenderbufferStorage(); virtual ~RenderbufferStorage() = 0; - virtual bool isColorbuffer() const; - virtual bool isDepthbuffer() const; - virtual bool isStencilbuffer() const; - virtual IDirect3DSurface9 *getRenderTarget(); virtual IDirect3DSurface9 *getDepthStencil(); - virtual int getWidth() const; - virtual int getHeight() const; - virtual GLenum getFormat() const; - virtual bool isFloatingPoint() const; - D3DFORMAT getD3DFormat() const; - GLsizei getSamples() const; - unsigned int getSerial() const; + 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; static unsigned int issueSerial(); + static unsigned int issueCubeSerials(); protected: - void setSize(int width, int height); - GLenum mFormat; + GLsizei mWidth; + GLsizei mHeight; + GLenum mInternalFormat; D3DFORMAT mD3DFormat; GLsizei mSamples; - const unsigned int mSerial; private: DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage); - static unsigned int mCurrentSerial; + const unsigned int mSerial; - int mWidth; - int mHeight; + static unsigned int mCurrentSerial; }; // Renderbuffer implements the GL renderbuffer object. -// It's only a wrapper for a RenderbufferStorage, but the internal object +// It's only a proxy for a RenderbufferInterface instance; the internal object // can change whenever glRenderbufferStorage is called. class Renderbuffer : public RefCountObject { public: - Renderbuffer(GLuint id, RenderbufferStorage *storage); + Renderbuffer(GLuint id, RenderbufferInterface *storage); - ~Renderbuffer(); + virtual ~Renderbuffer(); - bool isColorbuffer() const; - bool isDepthbuffer() const; - bool isStencilbuffer() const; + // These functions from RefCountObject are overloaded here because + // Textures need to maintain their own count of references to them via + // Renderbuffers/RenderbufferTextures. These functions invoke those + // reference counting functions on the RenderbufferInterface. + void addRef() const; + void release() const; IDirect3DSurface9 *getRenderTarget(); IDirect3DSurface9 *getDepthStencil(); - int getWidth() const; - int getHeight() const; - GLenum getFormat() const; + GLsizei getWidth() const; + GLsizei getHeight() const; + GLenum getInternalFormat() const; D3DFORMAT getD3DFormat() const; + GLuint getRedSize() const; + GLuint getGreenSize() const; + GLuint getBlueSize() const; + GLuint getAlphaSize() const; + GLuint getDepthSize() const; + GLuint getStencilSize() const; + GLsizei getSamples() const; + unsigned int getSerial() const; void setStorage(RenderbufferStorage *newStorage); - RenderbufferStorage *getStorage() { return mStorage; } private: DISALLOW_COPY_AND_ASSIGN(Renderbuffer); - RenderbufferStorage *mStorage; + RenderbufferInterface *mInstance; }; class Colorbuffer : public RenderbufferStorage { public: explicit Colorbuffer(IDirect3DSurface9 *renderTarget); - explicit Colorbuffer(const Texture* texture); - Colorbuffer(int width, int height, GLenum format, GLsizei samples); - - ~Colorbuffer(); - - bool isColorbuffer() const; - - GLuint getRedSize() const; - GLuint getGreenSize() const; - GLuint getBlueSize() const; - GLuint getAlphaSize() const; + Colorbuffer(GLsizei width, GLsizei height, GLenum format, GLsizei samples); - IDirect3DSurface9 *getRenderTarget(); + virtual ~Colorbuffer(); - protected: - IDirect3DSurface9 *mRenderTarget; + virtual IDirect3DSurface9 *getRenderTarget(); private: DISALLOW_COPY_AND_ASSIGN(Colorbuffer); + + IDirect3DSurface9 *mRenderTarget; }; class DepthStencilbuffer : public RenderbufferStorage { public: explicit DepthStencilbuffer(IDirect3DSurface9 *depthStencil); - DepthStencilbuffer(int width, int height, GLsizei samples); + DepthStencilbuffer(GLsizei width, GLsizei height, GLsizei samples); ~DepthStencilbuffer(); - virtual bool isDepthbuffer() const; - virtual bool isStencilbuffer() const; - - GLuint getDepthSize() const; - GLuint getStencilSize() const; + virtual IDirect3DSurface9 *getDepthStencil(); - IDirect3DSurface9 *getDepthStencil(); + protected: + IDirect3DSurface9 *mDepthStencil; private: DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer); - IDirect3DSurface9 *mDepthStencil; }; class Depthbuffer : public DepthStencilbuffer { public: explicit Depthbuffer(IDirect3DSurface9 *depthStencil); - Depthbuffer(int width, int height, GLsizei samples); + Depthbuffer(GLsizei width, GLsizei height, GLsizei samples); - ~Depthbuffer(); - - bool isDepthbuffer() const; - bool isStencilbuffer() const; + virtual ~Depthbuffer(); private: DISALLOW_COPY_AND_ASSIGN(Depthbuffer); @@ -163,12 +216,9 @@ class Stencilbuffer : public DepthStencilbuffer { public: explicit Stencilbuffer(IDirect3DSurface9 *depthStencil); - Stencilbuffer(int width, int height, GLsizei samples); - - ~Stencilbuffer(); + Stencilbuffer(GLsizei width, GLsizei height, GLsizei samples); - bool isDepthbuffer() const; - bool isStencilbuffer() const; + virtual ~Stencilbuffer(); private: DISALLOW_COPY_AND_ASSIGN(Stencilbuffer); |