blob: 837d617a3d668c06ff8ba66ca1031848b4f50998 [file] [log] [blame]
shannon.woods@transgaming.combdf2d802013-02-28 23:16:20 +00001#include "precompiled.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00002//
daniel@transgaming.combdfb3912012-10-31 19:55:21 +00003// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00004// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6//
7
8// Renderbuffer.cpp: the gl::Renderbuffer class and its derived classes
9// Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
10// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
11
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000012#include "libGLESv2/Renderbuffer.h"
shannon.woods@transgaming.comd2811d62013-02-28 23:11:19 +000013#include "libGLESv2/renderer/RenderTarget.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000014
enne@chromium.org0fa74632010-09-21 16:18:52 +000015#include "libGLESv2/Texture.h"
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000016#include "libGLESv2/renderer/Renderer.h"
shannonwoods@chromium.orga2ecfcc2013-05-30 00:11:59 +000017#include "common/utilities.h"
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +000018#include "libGLESv2/formatutils.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000019
20namespace gl
21{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000022unsigned int RenderbufferStorage::mCurrentSerial = 1;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000023
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000024RenderbufferInterface::RenderbufferInterface()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000025{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000026}
27
daniel@transgaming.com2678b342012-01-18 16:29:40 +000028// The default case for classes inherited from RenderbufferInterface is not to
29// need to do anything upon the reference count to the parent Renderbuffer incrementing
30// or decrementing.
31void RenderbufferInterface::addProxyRef(const Renderbuffer *proxy)
32{
33}
34
35void RenderbufferInterface::releaseProxy(const Renderbuffer *proxy)
36{
37}
38
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000039///// RenderbufferTexture2D Implementation ////////
40
Geoff Lang8040f572013-07-25 16:49:54 -040041RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLint level) : mLevel(level)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000042{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000043 mTexture2D.set(texture);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000044}
45
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000046RenderbufferTexture2D::~RenderbufferTexture2D()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000047{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000048 mTexture2D.set(NULL);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000049}
50
daniel@transgaming.com2678b342012-01-18 16:29:40 +000051// Textures need to maintain their own reference count for references via
52// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000053void RenderbufferTexture2D::addProxyRef(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000054{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000055 mTexture2D->addProxyRef(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000056}
57
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000058void RenderbufferTexture2D::releaseProxy(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000059{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000060 mTexture2D->releaseProxy(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000061}
62
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000063rx::RenderTarget *RenderbufferTexture2D::getRenderTarget()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000064{
Geoff Lang8040f572013-07-25 16:49:54 -040065 return mTexture2D->getRenderTarget(mLevel);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000066}
67
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000068rx::RenderTarget *RenderbufferTexture2D::getDepthStencil()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000069{
Geoff Lang8040f572013-07-25 16:49:54 -040070 return mTexture2D->getDepthSencil(mLevel);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000071}
72
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000073GLsizei RenderbufferTexture2D::getWidth() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000074{
Geoff Lang8040f572013-07-25 16:49:54 -040075 return mTexture2D->getWidth(mLevel);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000076}
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000077
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000078GLsizei RenderbufferTexture2D::getHeight() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000079{
Geoff Lang8040f572013-07-25 16:49:54 -040080 return mTexture2D->getHeight(mLevel);
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000081}
82
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000083GLenum RenderbufferTexture2D::getInternalFormat() const
84{
Geoff Lang8040f572013-07-25 16:49:54 -040085 return mTexture2D->getInternalFormat(mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000086}
87
daniel@transgaming.com20d36662012-10-31 19:51:43 +000088GLenum RenderbufferTexture2D::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000089{
Geoff Lang8040f572013-07-25 16:49:54 -040090 return mTexture2D->getActualFormat(mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000091}
92
93GLsizei RenderbufferTexture2D::getSamples() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000094{
95 return 0;
96}
97
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000098unsigned int RenderbufferTexture2D::getSerial() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000099{
Geoff Lang8040f572013-07-25 16:49:54 -0400100 return mTexture2D->getRenderTargetSerial(mLevel);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000101}
102
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000103///// RenderbufferTextureCubeMap Implementation ////////
104
Geoff Lang8040f572013-07-25 16:49:54 -0400105RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum faceTarget, GLint level)
106 : mFaceTarget(faceTarget), mLevel(level)
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000107{
108 mTextureCubeMap.set(texture);
109}
110
111RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
112{
113 mTextureCubeMap.set(NULL);
114}
115
116// Textures need to maintain their own reference count for references via
117// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
118void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
119{
120 mTextureCubeMap->addProxyRef(proxy);
121}
122
123void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
124{
125 mTextureCubeMap->releaseProxy(proxy);
126}
127
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000128rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000129{
Geoff Lang8040f572013-07-25 16:49:54 -0400130 return mTextureCubeMap->getRenderTarget(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000131}
132
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000133rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000134{
Geoff Lang8040f572013-07-25 16:49:54 -0400135 return mTextureCubeMap->getDepthStencil(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000136}
137
138GLsizei RenderbufferTextureCubeMap::getWidth() const
139{
Geoff Lang8040f572013-07-25 16:49:54 -0400140 return mTextureCubeMap->getWidth(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000141}
142
143GLsizei RenderbufferTextureCubeMap::getHeight() const
144{
Geoff Lang8040f572013-07-25 16:49:54 -0400145 return mTextureCubeMap->getHeight(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000146}
147
148GLenum RenderbufferTextureCubeMap::getInternalFormat() const
149{
Geoff Lang8040f572013-07-25 16:49:54 -0400150 return mTextureCubeMap->getInternalFormat(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000151}
152
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000153GLenum RenderbufferTextureCubeMap::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000154{
Geoff Lang8040f572013-07-25 16:49:54 -0400155 return mTextureCubeMap->getActualFormat(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000156}
157
158GLsizei RenderbufferTextureCubeMap::getSamples() const
159{
160 return 0;
161}
162
163unsigned int RenderbufferTextureCubeMap::getSerial() const
164{
Geoff Lang8040f572013-07-25 16:49:54 -0400165 return mTextureCubeMap->getRenderTargetSerial(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000166}
167
Geoff Langd5d8e392013-07-25 16:53:03 -0400168///// RenderbufferTexture3DLayer Implementation ////////
169
170RenderbufferTexture3DLayer::RenderbufferTexture3DLayer(Texture3D *texture, GLint level, GLint layer)
171 : mLevel(level), mLayer(layer)
172{
173 mTexture3D.set(texture);
174}
175
176RenderbufferTexture3DLayer::~RenderbufferTexture3DLayer()
177{
178 mTexture3D.set(NULL);
179}
180
181// Textures need to maintain their own reference count for references via
182// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
183void RenderbufferTexture3DLayer::addProxyRef(const Renderbuffer *proxy)
184{
185 mTexture3D->addProxyRef(proxy);
186}
187
188void RenderbufferTexture3DLayer::releaseProxy(const Renderbuffer *proxy)
189{
190 mTexture3D->releaseProxy(proxy);
191}
192
193rx::RenderTarget *RenderbufferTexture3DLayer::getRenderTarget()
194{
195 return mTexture3D->getRenderTarget(mLevel, mLayer);
196}
197
198rx::RenderTarget *RenderbufferTexture3DLayer::getDepthStencil()
199{
200 return mTexture3D->getDepthStencil(mLevel, mLayer);
201}
202
203GLsizei RenderbufferTexture3DLayer::getWidth() const
204{
205 return mTexture3D->getWidth(mLevel);
206}
207
208GLsizei RenderbufferTexture3DLayer::getHeight() const
209{
210 return mTexture3D->getHeight(mLevel);
211}
212
213GLenum RenderbufferTexture3DLayer::getInternalFormat() const
214{
215 return mTexture3D->getInternalFormat(mLevel);
216}
217
218GLenum RenderbufferTexture3DLayer::getActualFormat() const
219{
220 return mTexture3D->getActualFormat(mLevel);
221}
222
223GLsizei RenderbufferTexture3DLayer::getSamples() const
224{
225 return 0;
226}
227
228unsigned int RenderbufferTexture3DLayer::getSerial() const
229{
230 return mTexture3D->getRenderTargetSerial(mLevel, mLayer);
231}
232
233////// RenderbufferTexture2DArrayLayer Implementation //////
234
235RenderbufferTexture2DArrayLayer::RenderbufferTexture2DArrayLayer(Texture2DArray *texture, GLint level, GLint layer)
236 : mLevel(level), mLayer(layer)
237{
238 mTexture2DArray.set(texture);
239}
240
241RenderbufferTexture2DArrayLayer::~RenderbufferTexture2DArrayLayer()
242{
243 mTexture2DArray.set(NULL);
244}
245
246void RenderbufferTexture2DArrayLayer::addProxyRef(const Renderbuffer *proxy)
247{
248 mTexture2DArray->addProxyRef(proxy);
249}
250
251void RenderbufferTexture2DArrayLayer::releaseProxy(const Renderbuffer *proxy)
252{
253 mTexture2DArray->releaseProxy(proxy);
254}
255
256rx::RenderTarget *RenderbufferTexture2DArrayLayer::getRenderTarget()
257{
258 return mTexture2DArray->getRenderTarget(mLevel, mLayer);
259}
260
261rx::RenderTarget *RenderbufferTexture2DArrayLayer::getDepthStencil()
262{
263 return mTexture2DArray->getDepthStencil(mLevel, mLayer);
264}
265
266GLsizei RenderbufferTexture2DArrayLayer::getWidth() const
267{
268 return mTexture2DArray->getWidth(mLevel);
269}
270
271GLsizei RenderbufferTexture2DArrayLayer::getHeight() const
272{
273 return mTexture2DArray->getHeight(mLevel);
274}
275
276GLenum RenderbufferTexture2DArrayLayer::getInternalFormat() const
277{
278 return mTexture2DArray->getInternalFormat(mLevel);
279}
280
281GLenum RenderbufferTexture2DArrayLayer::getActualFormat() const
282{
283 return mTexture2DArray->getActualFormat(mLevel);
284}
285
286GLsizei RenderbufferTexture2DArrayLayer::getSamples() const
287{
288 return 0;
289}
290
291unsigned int RenderbufferTexture2DArrayLayer::getSerial() const
292{
293 return mTexture2DArray->getRenderTargetSerial(mLevel, mLayer);
294}
295
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000296////// Renderbuffer Implementation //////
297
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000298Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000299{
300 ASSERT(instance != NULL);
301 mInstance = instance;
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000302
303 ASSERT(renderer != NULL);
304 mRenderer = renderer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000305}
306
307Renderbuffer::~Renderbuffer()
308{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000309 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000310}
311
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000312// The RenderbufferInterface contained in this Renderbuffer may need to maintain
313// its own reference count, so we pass it on here.
314void Renderbuffer::addRef() const
315{
316 mInstance->addProxyRef(this);
317
318 RefCountObject::addRef();
319}
320
321void Renderbuffer::release() const
322{
323 mInstance->releaseProxy(this);
324
325 RefCountObject::release();
326}
327
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000328rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000329{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000330 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000331}
332
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000333rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000334{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000335 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000336}
337
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000338GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000339{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000340 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000341}
342
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000343GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000344{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000345 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000346}
347
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000348GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000349{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000350 return mInstance->getInternalFormat();
351}
352
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000353GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000354{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000355 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000356}
357
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000358GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000359{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000360 return gl::GetRedBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000361}
362
363GLuint Renderbuffer::getGreenSize() const
364{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000365 return gl::GetGreenBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000366}
367
368GLuint Renderbuffer::getBlueSize() const
369{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000370 return gl::GetBlueBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000371}
372
373GLuint Renderbuffer::getAlphaSize() const
374{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000375 return gl::GetAlphaBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000376}
377
378GLuint Renderbuffer::getDepthSize() const
379{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000380 return gl::GetDepthBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000381}
382
383GLuint Renderbuffer::getStencilSize() const
384{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000385 return gl::GetStencilBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000386}
387
388GLsizei Renderbuffer::getSamples() const
389{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000390 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000391}
392
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000393unsigned int Renderbuffer::getSerial() const
394{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000395 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000396}
397
398void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
399{
400 ASSERT(newStorage != NULL);
401
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000402 delete mInstance;
403 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000404}
405
Geoff Lang8040f572013-07-25 16:49:54 -0400406RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerials(1))
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000407{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000408 mWidth = 0;
409 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000410 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000411 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000412 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000413}
414
415RenderbufferStorage::~RenderbufferStorage()
416{
417}
418
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000419rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000420{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000421 return NULL;
422}
423
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000424rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000425{
426 return NULL;
427}
428
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000429GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000430{
431 return mWidth;
432}
433
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000434GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000435{
436 return mHeight;
437}
438
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000439GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000440{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000441 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000442}
443
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000444GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000445{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000446 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000447}
448
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000449GLsizei RenderbufferStorage::getSamples() const
450{
451 return mSamples;
452}
453
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000454unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000455{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000456 return mSerial;
457}
458
Geoff Lang8040f572013-07-25 16:49:54 -0400459unsigned int RenderbufferStorage::issueSerials(GLuint count)
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000460{
461 unsigned int firstSerial = mCurrentSerial;
Geoff Lang8040f572013-07-25 16:49:54 -0400462 mCurrentSerial += count;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000463 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000464}
465
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000466Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000467{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000468 mRenderTarget = renderer->createRenderTarget(swapChain, false);
469
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000470 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000471 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000472 mWidth = mRenderTarget->getWidth();
473 mHeight = mRenderTarget->getHeight();
474 mInternalFormat = mRenderTarget->getInternalFormat();
475 mActualFormat = mRenderTarget->getActualFormat();
476 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000477 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000478}
479
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000480Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000481{
Geoff Langa2d97f12013-06-11 11:44:02 -0400482 mRenderTarget = renderer->createRenderTarget(width, height, format, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000483
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000484 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000485 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000486 mWidth = width;
487 mHeight = height;
488 mInternalFormat = format;
489 mActualFormat = mRenderTarget->getActualFormat();
490 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000491 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000492}
493
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000494Colorbuffer::~Colorbuffer()
495{
496 if (mRenderTarget)
497 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000498 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000499 }
500}
501
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000502rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000503{
Geoff Lang8040f572013-07-25 16:49:54 -0400504 return mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000505}
506
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000507DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000508{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000509 mDepthStencil = renderer->createRenderTarget(swapChain, true);
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000510 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000511 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000512 mWidth = mDepthStencil->getWidth();
513 mHeight = mDepthStencil->getHeight();
514 mInternalFormat = mDepthStencil->getInternalFormat();
515 mSamples = mDepthStencil->getSamples();
516 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000517 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000518}
519
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000520DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000521{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000522
Geoff Langa2d97f12013-06-11 11:44:02 -0400523 mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000524
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000525 mWidth = mDepthStencil->getWidth();
526 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000527 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000528 mActualFormat = mDepthStencil->getActualFormat();
529 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000530}
531
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000532DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000533{
534 if (mDepthStencil)
535 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000536 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000537 }
538}
539
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000540rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000541{
Geoff Lang8040f572013-07-25 16:49:54 -0400542 return mDepthStencil;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000543}
544
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000545Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000546{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000547 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000548 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000549 mInternalFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
550 // will expect one of the valid renderbuffer formats for use in
551 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000552 }
553}
554
555Depthbuffer::~Depthbuffer()
556{
557}
558
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000559Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000560{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000561 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000562 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000563 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
564 // will expect one of the valid renderbuffer formats for use in
565 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000566 }
567}
568
569Stencilbuffer::~Stencilbuffer()
570{
571}
572
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000573}