gfx/angle/src/libGLESv2/Renderbuffer.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:7bb3cfd7f574
1 //
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.
5 //
6
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.
11
12 #ifndef LIBGLESV2_RENDERBUFFER_H_
13 #define LIBGLESV2_RENDERBUFFER_H_
14
15 #define GL_APICALL
16 #include <GLES2/gl2.h>
17
18 #include "common/angleutils.h"
19 #include "common/RefCountObject.h"
20
21 namespace rx
22 {
23 class Renderer;
24 class SwapChain;
25 class RenderTarget;
26 }
27
28 namespace gl
29 {
30 class Texture2D;
31 class TextureCubeMap;
32 class Renderbuffer;
33 class Colorbuffer;
34 class DepthStencilbuffer;
35
36 class RenderbufferInterface
37 {
38 public:
39 RenderbufferInterface();
40
41 virtual ~RenderbufferInterface() {};
42
43 virtual void addProxyRef(const Renderbuffer *proxy);
44 virtual void releaseProxy(const Renderbuffer *proxy);
45
46 virtual rx::RenderTarget *getRenderTarget() = 0;
47 virtual rx::RenderTarget *getDepthStencil() = 0;
48
49 virtual GLsizei getWidth() const = 0;
50 virtual GLsizei getHeight() const = 0;
51 virtual GLenum getInternalFormat() const = 0;
52 virtual GLenum getActualFormat() const = 0;
53 virtual GLsizei getSamples() const = 0;
54
55 GLuint getRedSize() const;
56 GLuint getGreenSize() const;
57 GLuint getBlueSize() const;
58 GLuint getAlphaSize() const;
59 GLuint getDepthSize() const;
60 GLuint getStencilSize() const;
61
62 virtual unsigned int getSerial() const = 0;
63
64 private:
65 DISALLOW_COPY_AND_ASSIGN(RenderbufferInterface);
66 };
67
68 class RenderbufferTexture2D : public RenderbufferInterface
69 {
70 public:
71 RenderbufferTexture2D(Texture2D *texture, GLenum target);
72
73 virtual ~RenderbufferTexture2D();
74
75 void addProxyRef(const Renderbuffer *proxy);
76 void releaseProxy(const Renderbuffer *proxy);
77
78 rx::RenderTarget *getRenderTarget();
79 rx::RenderTarget *getDepthStencil();
80
81 virtual GLsizei getWidth() const;
82 virtual GLsizei getHeight() const;
83 virtual GLenum getInternalFormat() const;
84 virtual GLenum getActualFormat() const;
85 virtual GLsizei getSamples() const;
86
87 virtual unsigned int getSerial() const;
88
89 private:
90 DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture2D);
91
92 BindingPointer <Texture2D> mTexture2D;
93 GLenum mTarget;
94 };
95
96 class RenderbufferTextureCubeMap : public RenderbufferInterface
97 {
98 public:
99 RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target);
100
101 virtual ~RenderbufferTextureCubeMap();
102
103 void addProxyRef(const Renderbuffer *proxy);
104 void releaseProxy(const Renderbuffer *proxy);
105
106 rx::RenderTarget *getRenderTarget();
107 rx::RenderTarget *getDepthStencil();
108
109 virtual GLsizei getWidth() const;
110 virtual GLsizei getHeight() const;
111 virtual GLenum getInternalFormat() const;
112 virtual GLenum getActualFormat() const;
113 virtual GLsizei getSamples() const;
114
115 virtual unsigned int getSerial() const;
116
117 private:
118 DISALLOW_COPY_AND_ASSIGN(RenderbufferTextureCubeMap);
119
120 BindingPointer <TextureCubeMap> mTextureCubeMap;
121 GLenum mTarget;
122 };
123
124 // A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
125 // is called. The specific concrete type depends on whether the internal format is
126 // colour depth, stencil or packed depth/stencil.
127 class RenderbufferStorage : public RenderbufferInterface
128 {
129 public:
130 RenderbufferStorage();
131
132 virtual ~RenderbufferStorage() = 0;
133
134 virtual rx::RenderTarget *getRenderTarget();
135 virtual rx::RenderTarget *getDepthStencil();
136
137 virtual GLsizei getWidth() const;
138 virtual GLsizei getHeight() const;
139 virtual GLenum getInternalFormat() const;
140 virtual GLenum getActualFormat() const;
141 virtual GLsizei getSamples() const;
142
143 virtual unsigned int getSerial() const;
144
145 static unsigned int issueSerial();
146 static unsigned int issueCubeSerials();
147
148 protected:
149 GLsizei mWidth;
150 GLsizei mHeight;
151 GLenum mInternalFormat;
152 GLenum mActualFormat;
153 GLsizei mSamples;
154
155 private:
156 DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage);
157
158 const unsigned int mSerial;
159
160 static unsigned int mCurrentSerial;
161 };
162
163 // Renderbuffer implements the GL renderbuffer object.
164 // It's only a proxy for a RenderbufferInterface instance; the internal object
165 // can change whenever glRenderbufferStorage is called.
166 class Renderbuffer : public RefCountObject
167 {
168 public:
169 Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *storage);
170
171 virtual ~Renderbuffer();
172
173 // These functions from RefCountObject are overloaded here because
174 // Textures need to maintain their own count of references to them via
175 // Renderbuffers/RenderbufferTextures. These functions invoke those
176 // reference counting functions on the RenderbufferInterface.
177 void addRef() const;
178 void release() const;
179
180 rx::RenderTarget *getRenderTarget();
181 rx::RenderTarget *getDepthStencil();
182
183 GLsizei getWidth() const;
184 GLsizei getHeight() const;
185 GLenum getInternalFormat() const;
186 GLenum getActualFormat() const;
187 GLuint getRedSize() const;
188 GLuint getGreenSize() const;
189 GLuint getBlueSize() const;
190 GLuint getAlphaSize() const;
191 GLuint getDepthSize() const;
192 GLuint getStencilSize() const;
193 GLsizei getSamples() const;
194
195 unsigned int getSerial() const;
196
197 void setStorage(RenderbufferStorage *newStorage);
198
199 private:
200 DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
201
202 RenderbufferInterface *mInstance;
203 };
204
205 class Colorbuffer : public RenderbufferStorage
206 {
207 public:
208 Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
209 Colorbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples);
210
211 virtual ~Colorbuffer();
212
213 virtual rx::RenderTarget *getRenderTarget();
214
215 private:
216 DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
217
218 rx::RenderTarget *mRenderTarget;
219 };
220
221 class DepthStencilbuffer : public RenderbufferStorage
222 {
223 public:
224 DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
225 DepthStencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
226
227 ~DepthStencilbuffer();
228
229 virtual rx::RenderTarget *getDepthStencil();
230
231 protected:
232 rx::RenderTarget *mDepthStencil;
233
234 private:
235 DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer);
236 };
237
238 class Depthbuffer : public DepthStencilbuffer
239 {
240 public:
241 Depthbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
242
243 virtual ~Depthbuffer();
244
245 private:
246 DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
247 };
248
249 class Stencilbuffer : public DepthStencilbuffer
250 {
251 public:
252 Stencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
253
254 virtual ~Stencilbuffer();
255
256 private:
257 DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
258 };
259 }
260
261 #endif // LIBGLESV2_RENDERBUFFER_H_

mercurial