blob: 127513741c2f100e4e55cae969a066182f27d281 [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"
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000017#include "libGLESv2/utilities.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000018
19namespace gl
20{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000021unsigned int RenderbufferStorage::mCurrentSerial = 1;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000022
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000023RenderbufferInterface::RenderbufferInterface()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000024{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000025}
26
daniel@transgaming.com2678b342012-01-18 16:29:40 +000027// The default case for classes inherited from RenderbufferInterface is not to
28// need to do anything upon the reference count to the parent Renderbuffer incrementing
29// or decrementing.
30void RenderbufferInterface::addProxyRef(const Renderbuffer *proxy)
31{
32}
33
34void RenderbufferInterface::releaseProxy(const Renderbuffer *proxy)
35{
36}
37
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000038GLuint RenderbufferInterface::getRedSize() const
39{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000040 return gl::GetRedSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000041}
42
43GLuint RenderbufferInterface::getGreenSize() const
44{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000045 return gl::GetGreenSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000046}
47
48GLuint RenderbufferInterface::getBlueSize() const
49{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000050 return gl::GetBlueSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000051}
52
53GLuint RenderbufferInterface::getAlphaSize() const
54{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000055 return gl::GetAlphaSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000056}
57
58GLuint RenderbufferInterface::getDepthSize() const
59{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000060 return gl::GetDepthSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000061}
62
63GLuint RenderbufferInterface::getStencilSize() const
64{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000065 return gl::GetStencilSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000066}
67
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000068///// RenderbufferTexture2D Implementation ////////
69
70RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLenum target) : mTarget(target)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000071{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000072 mTexture2D.set(texture);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000073}
74
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000075RenderbufferTexture2D::~RenderbufferTexture2D()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000076{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000077 mTexture2D.set(NULL);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000078}
79
daniel@transgaming.com2678b342012-01-18 16:29:40 +000080// Textures need to maintain their own reference count for references via
81// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000082void RenderbufferTexture2D::addProxyRef(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000083{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000084 mTexture2D->addProxyRef(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000085}
86
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000087void RenderbufferTexture2D::releaseProxy(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000088{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000089 mTexture2D->releaseProxy(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000090}
91
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000092rx::RenderTarget *RenderbufferTexture2D::getRenderTarget()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000093{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000094 return mTexture2D->getRenderTarget(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000095}
96
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000097rx::RenderTarget *RenderbufferTexture2D::getDepthStencil()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000098{
daniel@transgaming.com68145c62012-05-31 01:14:46 +000099 return mTexture2D->getDepthStencil(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000100}
101
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000102GLsizei RenderbufferTexture2D::getWidth() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000103{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000104 return mTexture2D->getWidth(0);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000105}
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000106
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000107GLsizei RenderbufferTexture2D::getHeight() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000108{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000109 return mTexture2D->getHeight(0);
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000110}
111
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000112GLenum RenderbufferTexture2D::getInternalFormat() const
113{
daniel@transgaming.com92f49922012-05-09 15:49:19 +0000114 return mTexture2D->getInternalFormat(0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000115}
116
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000117GLenum RenderbufferTexture2D::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000118{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000119 return mTexture2D->getActualFormat(0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000120}
121
122GLsizei RenderbufferTexture2D::getSamples() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000123{
124 return 0;
125}
126
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000127unsigned int RenderbufferTexture2D::getSerial() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000128{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000129 return mTexture2D->getRenderTargetSerial(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000130}
131
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000132///// RenderbufferTextureCubeMap Implementation ////////
133
134RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
135{
136 mTextureCubeMap.set(texture);
137}
138
139RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
140{
141 mTextureCubeMap.set(NULL);
142}
143
144// Textures need to maintain their own reference count for references via
145// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
146void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
147{
148 mTextureCubeMap->addProxyRef(proxy);
149}
150
151void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
152{
153 mTextureCubeMap->releaseProxy(proxy);
154}
155
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000156rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000157{
158 return mTextureCubeMap->getRenderTarget(mTarget);
159}
160
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000161rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000162{
163 return NULL;
164}
165
166GLsizei RenderbufferTextureCubeMap::getWidth() const
167{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000168 return mTextureCubeMap->getWidth(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000169}
170
171GLsizei RenderbufferTextureCubeMap::getHeight() const
172{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000173 return mTextureCubeMap->getHeight(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000174}
175
176GLenum RenderbufferTextureCubeMap::getInternalFormat() const
177{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000178 return mTextureCubeMap->getInternalFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000179}
180
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000181GLenum RenderbufferTextureCubeMap::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000182{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000183 return mTextureCubeMap->getActualFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000184}
185
186GLsizei RenderbufferTextureCubeMap::getSamples() const
187{
188 return 0;
189}
190
191unsigned int RenderbufferTextureCubeMap::getSerial() const
192{
193 return mTextureCubeMap->getRenderTargetSerial(mTarget);
194}
195
196////// Renderbuffer Implementation //////
197
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000198Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000199{
200 ASSERT(instance != NULL);
201 mInstance = instance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000202}
203
204Renderbuffer::~Renderbuffer()
205{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000206 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000207}
208
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000209// The RenderbufferInterface contained in this Renderbuffer may need to maintain
210// its own reference count, so we pass it on here.
211void Renderbuffer::addRef() const
212{
213 mInstance->addProxyRef(this);
214
215 RefCountObject::addRef();
216}
217
218void Renderbuffer::release() const
219{
220 mInstance->releaseProxy(this);
221
222 RefCountObject::release();
223}
224
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000225rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000226{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000227 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000228}
229
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000230rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000231{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000232 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000233}
234
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000235GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000236{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000237 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000238}
239
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000240GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000241{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000242 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000243}
244
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000245GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000246{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000247 return mInstance->getInternalFormat();
248}
249
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000250GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000251{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000252 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000253}
254
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000255GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000256{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000257 return mInstance->getRedSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000258}
259
260GLuint Renderbuffer::getGreenSize() const
261{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000262 return mInstance->getGreenSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000263}
264
265GLuint Renderbuffer::getBlueSize() const
266{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000267 return mInstance->getBlueSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000268}
269
270GLuint Renderbuffer::getAlphaSize() const
271{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000272 return mInstance->getAlphaSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000273}
274
275GLuint Renderbuffer::getDepthSize() const
276{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000277 return mInstance->getDepthSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000278}
279
280GLuint Renderbuffer::getStencilSize() const
281{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000282 return mInstance->getStencilSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000283}
284
285GLsizei Renderbuffer::getSamples() const
286{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000287 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000288}
289
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000290unsigned int Renderbuffer::getSerial() const
291{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000292 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000293}
294
295void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
296{
297 ASSERT(newStorage != NULL);
298
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000299 delete mInstance;
300 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000301}
302
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000303RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerial())
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000304{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000305 mWidth = 0;
306 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000307 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000308 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000309 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000310}
311
312RenderbufferStorage::~RenderbufferStorage()
313{
314}
315
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000316rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000317{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000318 return NULL;
319}
320
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000321rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000322{
323 return NULL;
324}
325
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000326GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000327{
328 return mWidth;
329}
330
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000331GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000332{
333 return mHeight;
334}
335
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000336GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000337{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000338 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000339}
340
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000341GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000342{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000343 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000344}
345
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000346GLsizei RenderbufferStorage::getSamples() const
347{
348 return mSamples;
349}
350
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000351unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000352{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000353 return mSerial;
354}
355
356unsigned int RenderbufferStorage::issueSerial()
357{
358 return mCurrentSerial++;
359}
360
361unsigned int RenderbufferStorage::issueCubeSerials()
362{
363 unsigned int firstSerial = mCurrentSerial;
364 mCurrentSerial += 6;
365 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000366}
367
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000368Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000369{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000370 mRenderTarget = renderer->createRenderTarget(swapChain, false);
371
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000372 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000373 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000374 mWidth = mRenderTarget->getWidth();
375 mHeight = mRenderTarget->getHeight();
376 mInternalFormat = mRenderTarget->getInternalFormat();
377 mActualFormat = mRenderTarget->getActualFormat();
378 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000379 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000380}
381
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000382Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000383{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000384 mRenderTarget = renderer->createRenderTarget(width, height, format, samples, false);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000385
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000386 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000387 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000388 mWidth = width;
389 mHeight = height;
390 mInternalFormat = format;
391 mActualFormat = mRenderTarget->getActualFormat();
392 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000393 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000394}
395
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000396Colorbuffer::~Colorbuffer()
397{
398 if (mRenderTarget)
399 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000400 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000401 }
402}
403
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000404rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000405{
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000406 if (mRenderTarget)
407 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000408 return mRenderTarget;
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000409 }
410
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000411 return NULL;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000412}
413
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000414DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000415{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000416 mDepthStencil = renderer->createRenderTarget(swapChain, true);
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000417 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000418 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000419 mWidth = mDepthStencil->getWidth();
420 mHeight = mDepthStencil->getHeight();
421 mInternalFormat = mDepthStencil->getInternalFormat();
422 mSamples = mDepthStencil->getSamples();
423 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000424 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000425}
426
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000427DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000428{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000429
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000430 mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples, true);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000431
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000432 mWidth = mDepthStencil->getWidth();
433 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000434 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000435 mActualFormat = mDepthStencil->getActualFormat();
436 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000437}
438
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000439DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000440{
441 if (mDepthStencil)
442 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000443 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000444 }
445}
446
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000447rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000448{
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000449 if (mDepthStencil)
450 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000451 return mDepthStencil;
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000452 }
453
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000454 return NULL;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000455}
456
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000457Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000458{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000459 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000460 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000461 mInternalFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
462 // will expect one of the valid renderbuffer formats for use in
463 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000464 }
465}
466
467Depthbuffer::~Depthbuffer()
468{
469}
470
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000471Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000472{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000473 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000474 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000475 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
476 // will expect one of the valid renderbuffer formats for use in
477 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000478 }
479}
480
481Stencilbuffer::~Stencilbuffer()
482{
483}
484
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000485}