blob: 940e3b37a7724f9bd545ff9748872a57c857d69b [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
168////// Renderbuffer Implementation //////
169
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000170Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000171{
172 ASSERT(instance != NULL);
173 mInstance = instance;
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000174
175 ASSERT(renderer != NULL);
176 mRenderer = renderer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000177}
178
179Renderbuffer::~Renderbuffer()
180{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000181 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000182}
183
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000184// The RenderbufferInterface contained in this Renderbuffer may need to maintain
185// its own reference count, so we pass it on here.
186void Renderbuffer::addRef() const
187{
188 mInstance->addProxyRef(this);
189
190 RefCountObject::addRef();
191}
192
193void Renderbuffer::release() const
194{
195 mInstance->releaseProxy(this);
196
197 RefCountObject::release();
198}
199
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000200rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000201{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000202 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000203}
204
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000205rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000206{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000207 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000208}
209
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000210GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000211{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000212 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000213}
214
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000215GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000216{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000217 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000218}
219
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000220GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000221{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000222 return mInstance->getInternalFormat();
223}
224
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000225GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000226{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000227 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000228}
229
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000230GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000231{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000232 return gl::GetRedBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000233}
234
235GLuint Renderbuffer::getGreenSize() const
236{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000237 return gl::GetGreenBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000238}
239
240GLuint Renderbuffer::getBlueSize() const
241{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000242 return gl::GetBlueBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000243}
244
245GLuint Renderbuffer::getAlphaSize() const
246{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000247 return gl::GetAlphaBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000248}
249
250GLuint Renderbuffer::getDepthSize() const
251{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000252 return gl::GetDepthBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000253}
254
255GLuint Renderbuffer::getStencilSize() const
256{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000257 return gl::GetStencilBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000258}
259
260GLsizei Renderbuffer::getSamples() const
261{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000262 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000263}
264
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000265unsigned int Renderbuffer::getSerial() const
266{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000267 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000268}
269
270void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
271{
272 ASSERT(newStorage != NULL);
273
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000274 delete mInstance;
275 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000276}
277
Geoff Lang8040f572013-07-25 16:49:54 -0400278RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerials(1))
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000279{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000280 mWidth = 0;
281 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000282 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000283 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000284 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000285}
286
287RenderbufferStorage::~RenderbufferStorage()
288{
289}
290
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000291rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000292{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000293 return NULL;
294}
295
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000296rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000297{
298 return NULL;
299}
300
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000301GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000302{
303 return mWidth;
304}
305
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000306GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000307{
308 return mHeight;
309}
310
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000311GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000312{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000313 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000314}
315
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000316GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000317{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000318 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000319}
320
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000321GLsizei RenderbufferStorage::getSamples() const
322{
323 return mSamples;
324}
325
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000326unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000327{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000328 return mSerial;
329}
330
Geoff Lang8040f572013-07-25 16:49:54 -0400331unsigned int RenderbufferStorage::issueSerials(GLuint count)
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000332{
333 unsigned int firstSerial = mCurrentSerial;
Geoff Lang8040f572013-07-25 16:49:54 -0400334 mCurrentSerial += count;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000335 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000336}
337
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000338Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000339{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000340 mRenderTarget = renderer->createRenderTarget(swapChain, false);
341
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000342 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000343 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000344 mWidth = mRenderTarget->getWidth();
345 mHeight = mRenderTarget->getHeight();
346 mInternalFormat = mRenderTarget->getInternalFormat();
347 mActualFormat = mRenderTarget->getActualFormat();
348 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000349 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000350}
351
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000352Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000353{
Geoff Langa2d97f12013-06-11 11:44:02 -0400354 mRenderTarget = renderer->createRenderTarget(width, height, format, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000355
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000356 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000357 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000358 mWidth = width;
359 mHeight = height;
360 mInternalFormat = format;
361 mActualFormat = mRenderTarget->getActualFormat();
362 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000363 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000364}
365
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000366Colorbuffer::~Colorbuffer()
367{
368 if (mRenderTarget)
369 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000370 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000371 }
372}
373
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000374rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000375{
Geoff Lang8040f572013-07-25 16:49:54 -0400376 return mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000377}
378
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000379DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000380{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000381 mDepthStencil = renderer->createRenderTarget(swapChain, true);
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000382 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000383 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000384 mWidth = mDepthStencil->getWidth();
385 mHeight = mDepthStencil->getHeight();
386 mInternalFormat = mDepthStencil->getInternalFormat();
387 mSamples = mDepthStencil->getSamples();
388 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000389 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000390}
391
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000392DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000393{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000394
Geoff Langa2d97f12013-06-11 11:44:02 -0400395 mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000396
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000397 mWidth = mDepthStencil->getWidth();
398 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000399 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000400 mActualFormat = mDepthStencil->getActualFormat();
401 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000402}
403
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000404DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000405{
406 if (mDepthStencil)
407 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000408 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000409 }
410}
411
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000412rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000413{
Geoff Lang8040f572013-07-25 16:49:54 -0400414 return mDepthStencil;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000415}
416
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000417Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000418{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000419 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000420 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000421 mInternalFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
422 // will expect one of the valid renderbuffer formats for use in
423 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000424 }
425}
426
427Depthbuffer::~Depthbuffer()
428{
429}
430
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000431Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000432{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000433 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000434 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000435 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
436 // will expect one of the valid renderbuffer formats for use in
437 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000438 }
439}
440
441Stencilbuffer::~Stencilbuffer()
442{
443}
444
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000445}