blob: 6bec10b00faefdf63ec359e523d3d51a141166e8 [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
41RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLenum target) : mTarget(target)
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{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000065 return mTexture2D->getRenderTarget(mTarget);
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{
daniel@transgaming.com68145c62012-05-31 01:14:46 +000070 return mTexture2D->getDepthStencil(mTarget);
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{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000075 return mTexture2D->getWidth(0);
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{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000080 return mTexture2D->getHeight(0);
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000081}
82
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000083GLenum RenderbufferTexture2D::getInternalFormat() const
84{
daniel@transgaming.com92f49922012-05-09 15:49:19 +000085 return mTexture2D->getInternalFormat(0);
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{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000090 return mTexture2D->getActualFormat(0);
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{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000100 return mTexture2D->getRenderTargetSerial(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000101}
102
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000103///// RenderbufferTextureCubeMap Implementation ////////
104
105RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
106{
107 mTextureCubeMap.set(texture);
108}
109
110RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
111{
112 mTextureCubeMap.set(NULL);
113}
114
115// Textures need to maintain their own reference count for references via
116// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
117void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
118{
119 mTextureCubeMap->addProxyRef(proxy);
120}
121
122void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
123{
124 mTextureCubeMap->releaseProxy(proxy);
125}
126
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000127rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000128{
129 return mTextureCubeMap->getRenderTarget(mTarget);
130}
131
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000132rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000133{
134 return NULL;
135}
136
137GLsizei RenderbufferTextureCubeMap::getWidth() const
138{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000139 return mTextureCubeMap->getWidth(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000140}
141
142GLsizei RenderbufferTextureCubeMap::getHeight() const
143{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000144 return mTextureCubeMap->getHeight(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000145}
146
147GLenum RenderbufferTextureCubeMap::getInternalFormat() const
148{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000149 return mTextureCubeMap->getInternalFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000150}
151
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000152GLenum RenderbufferTextureCubeMap::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000153{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000154 return mTextureCubeMap->getActualFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000155}
156
157GLsizei RenderbufferTextureCubeMap::getSamples() const
158{
159 return 0;
160}
161
162unsigned int RenderbufferTextureCubeMap::getSerial() const
163{
164 return mTextureCubeMap->getRenderTargetSerial(mTarget);
165}
166
167////// Renderbuffer Implementation //////
168
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000169Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000170{
171 ASSERT(instance != NULL);
172 mInstance = instance;
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000173
174 ASSERT(renderer != NULL);
175 mRenderer = renderer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000176}
177
178Renderbuffer::~Renderbuffer()
179{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000180 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000181}
182
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000183// The RenderbufferInterface contained in this Renderbuffer may need to maintain
184// its own reference count, so we pass it on here.
185void Renderbuffer::addRef() const
186{
187 mInstance->addProxyRef(this);
188
189 RefCountObject::addRef();
190}
191
192void Renderbuffer::release() const
193{
194 mInstance->releaseProxy(this);
195
196 RefCountObject::release();
197}
198
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000199rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000200{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000201 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000202}
203
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000204rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000205{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000206 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000207}
208
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000209GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000210{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000211 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000212}
213
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000214GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000215{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000216 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000217}
218
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000219GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000220{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000221 return mInstance->getInternalFormat();
222}
223
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000224GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000225{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000226 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000227}
228
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000229GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000230{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000231 return gl::GetRedBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000232}
233
234GLuint Renderbuffer::getGreenSize() const
235{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000236 return gl::GetGreenBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000237}
238
239GLuint Renderbuffer::getBlueSize() const
240{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000241 return gl::GetBlueBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000242}
243
244GLuint Renderbuffer::getAlphaSize() const
245{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000246 return gl::GetAlphaBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000247}
248
249GLuint Renderbuffer::getDepthSize() const
250{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000251 return gl::GetDepthBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000252}
253
254GLuint Renderbuffer::getStencilSize() const
255{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000256 return gl::GetStencilBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000257}
258
259GLsizei Renderbuffer::getSamples() const
260{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000261 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000262}
263
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000264unsigned int Renderbuffer::getSerial() const
265{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000266 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000267}
268
269void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
270{
271 ASSERT(newStorage != NULL);
272
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000273 delete mInstance;
274 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000275}
276
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000277RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerial())
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000278{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000279 mWidth = 0;
280 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000281 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000282 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000283 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000284}
285
286RenderbufferStorage::~RenderbufferStorage()
287{
288}
289
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000290rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000291{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000292 return NULL;
293}
294
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000295rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000296{
297 return NULL;
298}
299
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000300GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000301{
302 return mWidth;
303}
304
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000305GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000306{
307 return mHeight;
308}
309
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000310GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000311{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000312 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000313}
314
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000315GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000316{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000317 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000318}
319
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000320GLsizei RenderbufferStorage::getSamples() const
321{
322 return mSamples;
323}
324
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000325unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000326{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000327 return mSerial;
328}
329
330unsigned int RenderbufferStorage::issueSerial()
331{
332 return mCurrentSerial++;
333}
334
335unsigned int RenderbufferStorage::issueCubeSerials()
336{
337 unsigned int firstSerial = mCurrentSerial;
338 mCurrentSerial += 6;
339 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000340}
341
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000342Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000343{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000344 mRenderTarget = renderer->createRenderTarget(swapChain, false);
345
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000346 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000347 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000348 mWidth = mRenderTarget->getWidth();
349 mHeight = mRenderTarget->getHeight();
350 mInternalFormat = mRenderTarget->getInternalFormat();
351 mActualFormat = mRenderTarget->getActualFormat();
352 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000353 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000354}
355
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000356Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000357{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000358 mRenderTarget = renderer->createRenderTarget(width, height, format, samples, false);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000359
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000360 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000361 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000362 mWidth = width;
363 mHeight = height;
364 mInternalFormat = format;
365 mActualFormat = mRenderTarget->getActualFormat();
366 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000367 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000368}
369
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000370Colorbuffer::~Colorbuffer()
371{
372 if (mRenderTarget)
373 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000374 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000375 }
376}
377
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000378rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000379{
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000380 if (mRenderTarget)
381 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000382 return mRenderTarget;
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000383 }
384
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000385 return NULL;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000386}
387
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000388DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000389{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000390 mDepthStencil = renderer->createRenderTarget(swapChain, true);
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000391 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000392 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000393 mWidth = mDepthStencil->getWidth();
394 mHeight = mDepthStencil->getHeight();
395 mInternalFormat = mDepthStencil->getInternalFormat();
396 mSamples = mDepthStencil->getSamples();
397 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000398 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000399}
400
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000401DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000402{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000403
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000404 mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples, true);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000405
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000406 mWidth = mDepthStencil->getWidth();
407 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000408 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000409 mActualFormat = mDepthStencil->getActualFormat();
410 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000411}
412
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000413DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000414{
415 if (mDepthStencil)
416 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000417 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000418 }
419}
420
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000421rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000422{
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000423 if (mDepthStencil)
424 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000425 return mDepthStencil;
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000426 }
427
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000428 return NULL;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000429}
430
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000431Depthbuffer::Depthbuffer(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_DEPTH_COMPONENT16; // 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
441Depthbuffer::~Depthbuffer()
442{
443}
444
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000445Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000446{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000447 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000448 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000449 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
450 // will expect one of the valid renderbuffer formats for use in
451 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000452 }
453}
454
455Stencilbuffer::~Stencilbuffer()
456{
457}
458
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000459}