2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
7 // Renderbuffer.h: Defines the wrapper class gl::Renderbuffer, as well as the
8 // class hierarchy used to store its contents: RenderbufferStorage, Colorbuffer,
9 // DepthStencilbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
10 // objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
12 #ifndef LIBGLESV2_RENDERBUFFER_H_
13 #define LIBGLESV2_RENDERBUFFER_H_
17 #include "common/angleutils.h"
18 #include "common/RefCountObject.h"
30 class RenderbufferStorage;
31 class FramebufferAttachment;
33 // A GL renderbuffer object is usually used as a depth or stencil buffer attachment
34 // for a framebuffer object. The renderbuffer itself is a distinct GL object, see
35 // FramebufferAttachment and Framebuffer for how they are applied to an FBO via an
38 class Renderbuffer : public RefCountObject
41 Renderbuffer(GLuint id, RenderbufferStorage *newStorage);
42 virtual ~Renderbuffer();
44 void setStorage(RenderbufferStorage *newStorage);
45 RenderbufferStorage *getStorage();
47 GLsizei getWidth() const;
48 GLsizei getHeight() const;
49 GLenum getInternalFormat() const;
50 GLenum getActualFormat() const;
51 GLsizei getSamples() const;
52 GLuint getRedSize() const;
53 GLuint getGreenSize() const;
54 GLuint getBlueSize() const;
55 GLuint getAlphaSize() const;
56 GLuint getDepthSize() const;
57 GLuint getStencilSize() const;
60 RenderbufferStorage *mStorage;
63 // A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
64 // is called. The specific concrete type depends on whether the internal format is
65 // colour depth, stencil or packed depth/stencil.
66 class RenderbufferStorage
69 RenderbufferStorage();
71 virtual ~RenderbufferStorage() = 0;
73 virtual rx::RenderTarget *getRenderTarget();
75 virtual GLsizei getWidth() const;
76 virtual GLsizei getHeight() const;
77 virtual GLenum getInternalFormat() const;
78 virtual GLenum getActualFormat() const;
79 virtual GLsizei getSamples() const;
81 virtual unsigned int getSerial() const;
83 virtual bool isTexture() const;
84 virtual unsigned int getTextureSerial() const;
86 static unsigned int issueSerials(unsigned int count);
91 GLenum mInternalFormat;
96 DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage);
98 const unsigned int mSerial;
100 static unsigned int mCurrentSerial;
103 class Colorbuffer : public RenderbufferStorage
106 Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
107 Colorbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples);
109 virtual ~Colorbuffer();
111 virtual rx::RenderTarget *getRenderTarget();
114 DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
116 rx::RenderTarget *mRenderTarget;
119 class DepthStencilbuffer : public RenderbufferStorage
122 DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
123 DepthStencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
125 ~DepthStencilbuffer();
127 virtual rx::RenderTarget *getRenderTarget();
130 rx::RenderTarget *mDepthStencil;
133 DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer);
136 class Depthbuffer : public DepthStencilbuffer
139 Depthbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
141 virtual ~Depthbuffer();
144 DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
147 class Stencilbuffer : public DepthStencilbuffer
150 Stencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
152 virtual ~Stencilbuffer();
155 DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
160 #endif // LIBGLESV2_RENDERBUFFER_H_