blob: 37afc9d2db577338e80a4b3483e559cae94d1198 [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"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000012
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000013#include "libGLESv2/main.h"
enne@chromium.org0fa74632010-09-21 16:18:52 +000014#include "libGLESv2/Texture.h"
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000015#include "libGLESv2/utilities.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000016
17namespace gl
18{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000019unsigned int RenderbufferStorage::mCurrentSerial = 1;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000020
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000021RenderbufferInterface::RenderbufferInterface()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000022{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000023}
24
daniel@transgaming.com2678b342012-01-18 16:29:40 +000025// The default case for classes inherited from RenderbufferInterface is not to
26// need to do anything upon the reference count to the parent Renderbuffer incrementing
27// or decrementing.
28void RenderbufferInterface::addProxyRef(const Renderbuffer *proxy)
29{
30}
31
32void RenderbufferInterface::releaseProxy(const Renderbuffer *proxy)
33{
34}
35
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000036GLuint RenderbufferInterface::getRedSize() const
37{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000038 return gl::GetRedSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000039}
40
41GLuint RenderbufferInterface::getGreenSize() const
42{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000043 return gl::GetGreenSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000044}
45
46GLuint RenderbufferInterface::getBlueSize() const
47{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000048 return gl::GetBlueSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000049}
50
51GLuint RenderbufferInterface::getAlphaSize() const
52{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000053 return gl::GetAlphaSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000054}
55
56GLuint RenderbufferInterface::getDepthSize() const
57{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000058 return gl::GetDepthSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000059}
60
61GLuint RenderbufferInterface::getStencilSize() const
62{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000063 return gl::GetStencilSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000064}
65
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000066///// RenderbufferTexture2D Implementation ////////
67
68RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLenum target) : mTarget(target)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000069{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000070 mTexture2D.set(texture);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000071}
72
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000073RenderbufferTexture2D::~RenderbufferTexture2D()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000074{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000075 mTexture2D.set(NULL);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000076}
77
daniel@transgaming.com2678b342012-01-18 16:29:40 +000078// Textures need to maintain their own reference count for references via
79// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000080void RenderbufferTexture2D::addProxyRef(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000081{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000082 mTexture2D->addProxyRef(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000083}
84
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000085void RenderbufferTexture2D::releaseProxy(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000086{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000087 mTexture2D->releaseProxy(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000088}
89
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000090rx::RenderTarget *RenderbufferTexture2D::getRenderTarget()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000091{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000092 return mTexture2D->getRenderTarget(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000093}
94
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000095rx::RenderTarget *RenderbufferTexture2D::getDepthStencil()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000096{
daniel@transgaming.com68145c62012-05-31 01:14:46 +000097 return mTexture2D->getDepthStencil(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000098}
99
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000100GLsizei RenderbufferTexture2D::getWidth() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000101{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000102 return mTexture2D->getWidth(0);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000103}
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000104
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000105GLsizei RenderbufferTexture2D::getHeight() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000106{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000107 return mTexture2D->getHeight(0);
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000108}
109
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000110GLenum RenderbufferTexture2D::getInternalFormat() const
111{
daniel@transgaming.com92f49922012-05-09 15:49:19 +0000112 return mTexture2D->getInternalFormat(0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000113}
114
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000115GLenum RenderbufferTexture2D::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000116{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000117 return mTexture2D->getActualFormat(0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000118}
119
120GLsizei RenderbufferTexture2D::getSamples() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000121{
122 return 0;
123}
124
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000125unsigned int RenderbufferTexture2D::getSerial() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000126{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000127 return mTexture2D->getRenderTargetSerial(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000128}
129
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000130///// RenderbufferTextureCubeMap Implementation ////////
131
132RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
133{
134 mTextureCubeMap.set(texture);
135}
136
137RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
138{
139 mTextureCubeMap.set(NULL);
140}
141
142// Textures need to maintain their own reference count for references via
143// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
144void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
145{
146 mTextureCubeMap->addProxyRef(proxy);
147}
148
149void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
150{
151 mTextureCubeMap->releaseProxy(proxy);
152}
153
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000154rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000155{
156 return mTextureCubeMap->getRenderTarget(mTarget);
157}
158
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000159rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000160{
161 return NULL;
162}
163
164GLsizei RenderbufferTextureCubeMap::getWidth() const
165{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000166 return mTextureCubeMap->getWidth(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000167}
168
169GLsizei RenderbufferTextureCubeMap::getHeight() const
170{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000171 return mTextureCubeMap->getHeight(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000172}
173
174GLenum RenderbufferTextureCubeMap::getInternalFormat() const
175{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000176 return mTextureCubeMap->getInternalFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000177}
178
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000179GLenum RenderbufferTextureCubeMap::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000180{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000181 return mTextureCubeMap->getActualFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000182}
183
184GLsizei RenderbufferTextureCubeMap::getSamples() const
185{
186 return 0;
187}
188
189unsigned int RenderbufferTextureCubeMap::getSerial() const
190{
191 return mTextureCubeMap->getRenderTargetSerial(mTarget);
192}
193
194////// Renderbuffer Implementation //////
195
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000196Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000197{
198 ASSERT(instance != NULL);
199 mInstance = instance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000200}
201
202Renderbuffer::~Renderbuffer()
203{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000204 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000205}
206
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000207// The RenderbufferInterface contained in this Renderbuffer may need to maintain
208// its own reference count, so we pass it on here.
209void Renderbuffer::addRef() const
210{
211 mInstance->addProxyRef(this);
212
213 RefCountObject::addRef();
214}
215
216void Renderbuffer::release() const
217{
218 mInstance->releaseProxy(this);
219
220 RefCountObject::release();
221}
222
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000223rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000224{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000225 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000226}
227
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000228rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000229{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000230 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000231}
232
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000233GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000234{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000235 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000236}
237
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000238GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000239{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000240 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000241}
242
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000243GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000244{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000245 return mInstance->getInternalFormat();
246}
247
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000248GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000249{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000250 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000251}
252
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000253GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000254{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000255 return mInstance->getRedSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000256}
257
258GLuint Renderbuffer::getGreenSize() const
259{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000260 return mInstance->getGreenSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000261}
262
263GLuint Renderbuffer::getBlueSize() const
264{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000265 return mInstance->getBlueSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000266}
267
268GLuint Renderbuffer::getAlphaSize() const
269{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000270 return mInstance->getAlphaSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000271}
272
273GLuint Renderbuffer::getDepthSize() const
274{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000275 return mInstance->getDepthSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000276}
277
278GLuint Renderbuffer::getStencilSize() const
279{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000280 return mInstance->getStencilSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000281}
282
283GLsizei Renderbuffer::getSamples() const
284{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000285 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000286}
287
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000288unsigned int Renderbuffer::getSerial() const
289{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000290 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000291}
292
293void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
294{
295 ASSERT(newStorage != NULL);
296
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000297 delete mInstance;
298 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000299}
300
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000301RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerial())
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000302{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000303 mWidth = 0;
304 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000305 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000306 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000307 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000308}
309
310RenderbufferStorage::~RenderbufferStorage()
311{
312}
313
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000314rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000315{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000316 return NULL;
317}
318
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000319rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000320{
321 return NULL;
322}
323
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000324GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000325{
326 return mWidth;
327}
328
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000329GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000330{
331 return mHeight;
332}
333
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000334GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000335{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000336 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000337}
338
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000339GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000340{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000341 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000342}
343
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000344GLsizei RenderbufferStorage::getSamples() const
345{
346 return mSamples;
347}
348
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000349unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000350{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000351 return mSerial;
352}
353
354unsigned int RenderbufferStorage::issueSerial()
355{
356 return mCurrentSerial++;
357}
358
359unsigned int RenderbufferStorage::issueCubeSerials()
360{
361 unsigned int firstSerial = mCurrentSerial;
362 mCurrentSerial += 6;
363 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000364}
365
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000366Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000367{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000368 mRenderTarget = renderer->createRenderTarget(swapChain, false);
369
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000370 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000371 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000372 mWidth = mRenderTarget->getWidth();
373 mHeight = mRenderTarget->getHeight();
374 mInternalFormat = mRenderTarget->getInternalFormat();
375 mActualFormat = mRenderTarget->getActualFormat();
376 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000377 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000378}
379
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000380Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000381{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000382 mRenderTarget = renderer->createRenderTarget(width, height, format, samples, false);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000383
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000384 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000385 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000386 mWidth = width;
387 mHeight = height;
388 mInternalFormat = format;
389 mActualFormat = mRenderTarget->getActualFormat();
390 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000391 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000392}
393
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000394Colorbuffer::~Colorbuffer()
395{
396 if (mRenderTarget)
397 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000398 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000399 }
400}
401
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000402rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000403{
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000404 if (mRenderTarget)
405 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000406 return mRenderTarget;
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000407 }
408
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000409 return NULL;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000410}
411
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000412DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000413{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000414 mDepthStencil = renderer->createRenderTarget(swapChain, true);
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000415 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000416 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000417 mWidth = mDepthStencil->getWidth();
418 mHeight = mDepthStencil->getHeight();
419 mInternalFormat = mDepthStencil->getInternalFormat();
420 mSamples = mDepthStencil->getSamples();
421 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000422 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000423}
424
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000425DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000426{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000427
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000428 mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples, true);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000429
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000430 mWidth = mDepthStencil->getWidth();
431 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000432 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000433 mActualFormat = mDepthStencil->getActualFormat();
434 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000435}
436
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000437DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000438{
439 if (mDepthStencil)
440 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000441 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000442 }
443}
444
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000445rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000446{
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000447 if (mDepthStencil)
448 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000449 return mDepthStencil;
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000450 }
451
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000452 return NULL;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000453}
454
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000455Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000456{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000457 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000458 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000459 mInternalFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
460 // will expect one of the valid renderbuffer formats for use in
461 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000462 }
463}
464
465Depthbuffer::~Depthbuffer()
466{
467}
468
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000469Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000470{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000471 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000472 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000473 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
474 // will expect one of the valid renderbuffer formats for use in
475 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000476 }
477}
478
479Stencilbuffer::~Stencilbuffer()
480{
481}
482
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000483}