blob: e67f6c9afc7067dbc81a9e104f7e77b7d7ff946c [file] [log] [blame]
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00001//
daniel@transgaming.combdfb3912012-10-31 19:55:21 +00002// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00003// 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.cpp: the gl::Renderbuffer class and its derived classes
8// Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
9// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
10
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000011#include "libGLESv2/Renderbuffer.h"
shannon.woods@transgaming.comd2811d62013-02-28 23:11:19 +000012#include "libGLESv2/renderer/RenderTarget.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000013
enne@chromium.org0fa74632010-09-21 16:18:52 +000014#include "libGLESv2/Texture.h"
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000015#include "libGLESv2/renderer/Renderer.h"
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000016#include "libGLESv2/utilities.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000017
18namespace gl
19{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000020unsigned int RenderbufferStorage::mCurrentSerial = 1;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000021
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000022RenderbufferInterface::RenderbufferInterface()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000023{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000024}
25
daniel@transgaming.com2678b342012-01-18 16:29:40 +000026// The default case for classes inherited from RenderbufferInterface is not to
27// need to do anything upon the reference count to the parent Renderbuffer incrementing
28// or decrementing.
29void RenderbufferInterface::addProxyRef(const Renderbuffer *proxy)
30{
31}
32
33void RenderbufferInterface::releaseProxy(const Renderbuffer *proxy)
34{
35}
36
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000037GLuint RenderbufferInterface::getRedSize() const
38{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000039 return gl::GetRedSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000040}
41
42GLuint RenderbufferInterface::getGreenSize() const
43{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000044 return gl::GetGreenSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000045}
46
47GLuint RenderbufferInterface::getBlueSize() const
48{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000049 return gl::GetBlueSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000050}
51
52GLuint RenderbufferInterface::getAlphaSize() const
53{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000054 return gl::GetAlphaSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000055}
56
57GLuint RenderbufferInterface::getDepthSize() const
58{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000059 return gl::GetDepthSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000060}
61
62GLuint RenderbufferInterface::getStencilSize() const
63{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000064 return gl::GetStencilSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000065}
66
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000067///// RenderbufferTexture2D Implementation ////////
68
69RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLenum target) : mTarget(target)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000070{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000071 mTexture2D.set(texture);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000072}
73
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000074RenderbufferTexture2D::~RenderbufferTexture2D()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000075{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000076 mTexture2D.set(NULL);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000077}
78
daniel@transgaming.com2678b342012-01-18 16:29:40 +000079// Textures need to maintain their own reference count for references via
80// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000081void RenderbufferTexture2D::addProxyRef(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000082{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000083 mTexture2D->addProxyRef(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000084}
85
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000086void RenderbufferTexture2D::releaseProxy(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000087{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000088 mTexture2D->releaseProxy(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000089}
90
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000091rx::RenderTarget *RenderbufferTexture2D::getRenderTarget()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000092{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000093 return mTexture2D->getRenderTarget(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000094}
95
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000096rx::RenderTarget *RenderbufferTexture2D::getDepthStencil()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000097{
daniel@transgaming.com68145c62012-05-31 01:14:46 +000098 return mTexture2D->getDepthStencil(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000099}
100
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000101GLsizei RenderbufferTexture2D::getWidth() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000102{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000103 return mTexture2D->getWidth(0);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000104}
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000105
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000106GLsizei RenderbufferTexture2D::getHeight() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000107{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000108 return mTexture2D->getHeight(0);
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000109}
110
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000111GLenum RenderbufferTexture2D::getInternalFormat() const
112{
daniel@transgaming.com92f49922012-05-09 15:49:19 +0000113 return mTexture2D->getInternalFormat(0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000114}
115
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000116GLenum RenderbufferTexture2D::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000117{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000118 return mTexture2D->getActualFormat(0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000119}
120
121GLsizei RenderbufferTexture2D::getSamples() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000122{
123 return 0;
124}
125
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000126unsigned int RenderbufferTexture2D::getSerial() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000127{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000128 return mTexture2D->getRenderTargetSerial(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000129}
130
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000131///// RenderbufferTextureCubeMap Implementation ////////
132
133RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
134{
135 mTextureCubeMap.set(texture);
136}
137
138RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
139{
140 mTextureCubeMap.set(NULL);
141}
142
143// Textures need to maintain their own reference count for references via
144// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
145void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
146{
147 mTextureCubeMap->addProxyRef(proxy);
148}
149
150void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
151{
152 mTextureCubeMap->releaseProxy(proxy);
153}
154
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000155rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000156{
157 return mTextureCubeMap->getRenderTarget(mTarget);
158}
159
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000160rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000161{
162 return NULL;
163}
164
165GLsizei RenderbufferTextureCubeMap::getWidth() const
166{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000167 return mTextureCubeMap->getWidth(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000168}
169
170GLsizei RenderbufferTextureCubeMap::getHeight() const
171{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000172 return mTextureCubeMap->getHeight(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000173}
174
175GLenum RenderbufferTextureCubeMap::getInternalFormat() const
176{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000177 return mTextureCubeMap->getInternalFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000178}
179
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000180GLenum RenderbufferTextureCubeMap::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000181{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000182 return mTextureCubeMap->getActualFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000183}
184
185GLsizei RenderbufferTextureCubeMap::getSamples() const
186{
187 return 0;
188}
189
190unsigned int RenderbufferTextureCubeMap::getSerial() const
191{
192 return mTextureCubeMap->getRenderTargetSerial(mTarget);
193}
194
195////// Renderbuffer Implementation //////
196
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000197Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000198{
199 ASSERT(instance != NULL);
200 mInstance = instance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000201}
202
203Renderbuffer::~Renderbuffer()
204{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000205 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000206}
207
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000208// The RenderbufferInterface contained in this Renderbuffer may need to maintain
209// its own reference count, so we pass it on here.
210void Renderbuffer::addRef() const
211{
212 mInstance->addProxyRef(this);
213
214 RefCountObject::addRef();
215}
216
217void Renderbuffer::release() const
218{
219 mInstance->releaseProxy(this);
220
221 RefCountObject::release();
222}
223
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000224rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000225{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000226 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000227}
228
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000229rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000230{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000231 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000232}
233
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000234GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000235{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000236 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000237}
238
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000239GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000240{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000241 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000242}
243
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000244GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000245{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000246 return mInstance->getInternalFormat();
247}
248
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000249GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000250{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000251 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000252}
253
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000254GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000255{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000256 return mInstance->getRedSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000257}
258
259GLuint Renderbuffer::getGreenSize() const
260{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000261 return mInstance->getGreenSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000262}
263
264GLuint Renderbuffer::getBlueSize() const
265{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000266 return mInstance->getBlueSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000267}
268
269GLuint Renderbuffer::getAlphaSize() const
270{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000271 return mInstance->getAlphaSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000272}
273
274GLuint Renderbuffer::getDepthSize() const
275{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000276 return mInstance->getDepthSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000277}
278
279GLuint Renderbuffer::getStencilSize() const
280{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000281 return mInstance->getStencilSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000282}
283
284GLsizei Renderbuffer::getSamples() const
285{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000286 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000287}
288
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000289unsigned int Renderbuffer::getSerial() const
290{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000291 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000292}
293
294void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
295{
296 ASSERT(newStorage != NULL);
297
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000298 delete mInstance;
299 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000300}
301
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000302RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerial())
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000303{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000304 mWidth = 0;
305 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000306 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000307 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000308 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000309}
310
311RenderbufferStorage::~RenderbufferStorage()
312{
313}
314
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000315rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000316{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000317 return NULL;
318}
319
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000320rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000321{
322 return NULL;
323}
324
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000325GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000326{
327 return mWidth;
328}
329
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000330GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000331{
332 return mHeight;
333}
334
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000335GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000336{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000337 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000338}
339
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000340GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000341{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000342 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000343}
344
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000345GLsizei RenderbufferStorage::getSamples() const
346{
347 return mSamples;
348}
349
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000350unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000351{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000352 return mSerial;
353}
354
355unsigned int RenderbufferStorage::issueSerial()
356{
357 return mCurrentSerial++;
358}
359
360unsigned int RenderbufferStorage::issueCubeSerials()
361{
362 unsigned int firstSerial = mCurrentSerial;
363 mCurrentSerial += 6;
364 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000365}
366
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000367Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000368{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000369 mRenderTarget = renderer->createRenderTarget(swapChain, false);
370
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000371 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000372 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000373 mWidth = mRenderTarget->getWidth();
374 mHeight = mRenderTarget->getHeight();
375 mInternalFormat = mRenderTarget->getInternalFormat();
376 mActualFormat = mRenderTarget->getActualFormat();
377 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000378 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000379}
380
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000381Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000382{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000383 mRenderTarget = renderer->createRenderTarget(width, height, format, samples, false);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000384
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000385 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000386 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000387 mWidth = width;
388 mHeight = height;
389 mInternalFormat = format;
390 mActualFormat = mRenderTarget->getActualFormat();
391 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000392 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000393}
394
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000395Colorbuffer::~Colorbuffer()
396{
397 if (mRenderTarget)
398 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000399 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000400 }
401}
402
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000403rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000404{
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000405 if (mRenderTarget)
406 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000407 return mRenderTarget;
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000408 }
409
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000410 return NULL;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000411}
412
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000413DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000414{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000415 mDepthStencil = renderer->createRenderTarget(swapChain, true);
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000416 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000417 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000418 mWidth = mDepthStencil->getWidth();
419 mHeight = mDepthStencil->getHeight();
420 mInternalFormat = mDepthStencil->getInternalFormat();
421 mSamples = mDepthStencil->getSamples();
422 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000423 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000424}
425
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000426DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000427{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000428
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000429 mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples, true);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000430
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000431 mWidth = mDepthStencil->getWidth();
432 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000433 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000434 mActualFormat = mDepthStencil->getActualFormat();
435 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000436}
437
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000438DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000439{
440 if (mDepthStencil)
441 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000442 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000443 }
444}
445
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000446rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000447{
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000448 if (mDepthStencil)
449 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000450 return mDepthStencil;
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000451 }
452
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000453 return NULL;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000454}
455
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000456Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000457{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000458 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000459 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000460 mInternalFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
461 // will expect one of the valid renderbuffer formats for use in
462 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000463 }
464}
465
466Depthbuffer::~Depthbuffer()
467{
468}
469
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000470Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000471{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000472 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000473 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000474 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
475 // will expect one of the valid renderbuffer formats for use in
476 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000477 }
478}
479
480Stencilbuffer::~Stencilbuffer()
481{
482}
483
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000484}