blob: df6ee30056f3626a30156e85d224bb1a6ede1711 [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
daniel@transgaming.com042d1b42012-11-28 19:37:09 +000017#include "libGLESv2/renderer/RenderTarget9.h" // D3D9_REPLACE
daniel@transgaming.coma27e05b2012-11-28 19:39:42 +000018#include "libGLESv2/renderer/SwapChain9.h" // D3D9_REPLACE
daniel@transgaming.comd8e36562012-10-31 19:52:19 +000019#include "libGLESv2/renderer/renderer9_utils.h" // D3D9_REPLACE
20
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000021namespace gl
22{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000023unsigned int RenderbufferStorage::mCurrentSerial = 1;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000024
daniel@transgaming.comfbc39522011-11-11 04:10:28 +000025RenderbufferInterface::RenderbufferInterface()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000026{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000027}
28
daniel@transgaming.com2678b342012-01-18 16:29:40 +000029// The default case for classes inherited from RenderbufferInterface is not to
30// need to do anything upon the reference count to the parent Renderbuffer incrementing
31// or decrementing.
32void RenderbufferInterface::addProxyRef(const Renderbuffer *proxy)
33{
34}
35
36void RenderbufferInterface::releaseProxy(const Renderbuffer *proxy)
37{
38}
39
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000040GLuint RenderbufferInterface::getRedSize() const
41{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000042 return gl::GetRedSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000043}
44
45GLuint RenderbufferInterface::getGreenSize() const
46{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000047 return gl::GetGreenSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000048}
49
50GLuint RenderbufferInterface::getBlueSize() const
51{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000052 return gl::GetBlueSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000053}
54
55GLuint RenderbufferInterface::getAlphaSize() const
56{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000057 return gl::GetAlphaSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000058}
59
60GLuint RenderbufferInterface::getDepthSize() const
61{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000062 return gl::GetDepthSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000063}
64
65GLuint RenderbufferInterface::getStencilSize() const
66{
daniel@transgaming.com20d36662012-10-31 19:51:43 +000067 return gl::GetStencilSize(getActualFormat());
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000068}
69
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000070///// RenderbufferTexture2D Implementation ////////
71
72RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLenum target) : mTarget(target)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000073{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000074 mTexture2D.set(texture);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000075}
76
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000077RenderbufferTexture2D::~RenderbufferTexture2D()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000078{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000079 mTexture2D.set(NULL);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000080}
81
daniel@transgaming.com2678b342012-01-18 16:29:40 +000082// Textures need to maintain their own reference count for references via
83// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000084void RenderbufferTexture2D::addProxyRef(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000085{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000086 mTexture2D->addProxyRef(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000087}
88
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000089void RenderbufferTexture2D::releaseProxy(const Renderbuffer *proxy)
daniel@transgaming.com2678b342012-01-18 16:29:40 +000090{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000091 mTexture2D->releaseProxy(proxy);
daniel@transgaming.com2678b342012-01-18 16:29:40 +000092}
93
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000094rx::RenderTarget *RenderbufferTexture2D::getRenderTarget()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000095{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +000096 return mTexture2D->getRenderTarget(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000097}
98
daniel@transgaming.comd186dc72012-11-28 19:40:16 +000099rx::RenderTarget *RenderbufferTexture2D::getDepthStencil()
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000100{
daniel@transgaming.com68145c62012-05-31 01:14:46 +0000101 return mTexture2D->getDepthStencil(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000102}
103
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000104GLsizei RenderbufferTexture2D::getWidth() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000105{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000106 return mTexture2D->getWidth(0);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000107}
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000108
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000109GLsizei RenderbufferTexture2D::getHeight() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000110{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000111 return mTexture2D->getHeight(0);
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000112}
113
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000114GLenum RenderbufferTexture2D::getInternalFormat() const
115{
daniel@transgaming.com92f49922012-05-09 15:49:19 +0000116 return mTexture2D->getInternalFormat(0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000117}
118
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000119GLenum RenderbufferTexture2D::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000120{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000121 return mTexture2D->getActualFormat(0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000122}
123
124GLsizei RenderbufferTexture2D::getSamples() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000125{
126 return 0;
127}
128
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000129unsigned int RenderbufferTexture2D::getSerial() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000130{
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000131 return mTexture2D->getRenderTargetSerial(mTarget);
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000132}
133
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000134///// RenderbufferTextureCubeMap Implementation ////////
135
136RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
137{
138 mTextureCubeMap.set(texture);
139}
140
141RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
142{
143 mTextureCubeMap.set(NULL);
144}
145
146// Textures need to maintain their own reference count for references via
147// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
148void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
149{
150 mTextureCubeMap->addProxyRef(proxy);
151}
152
153void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
154{
155 mTextureCubeMap->releaseProxy(proxy);
156}
157
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000158rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000159{
160 return mTextureCubeMap->getRenderTarget(mTarget);
161}
162
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000163rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000164{
165 return NULL;
166}
167
168GLsizei RenderbufferTextureCubeMap::getWidth() const
169{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000170 return mTextureCubeMap->getWidth(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000171}
172
173GLsizei RenderbufferTextureCubeMap::getHeight() const
174{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000175 return mTextureCubeMap->getHeight(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000176}
177
178GLenum RenderbufferTextureCubeMap::getInternalFormat() const
179{
daniel@transgaming.com4df88e82012-05-09 15:49:24 +0000180 return mTextureCubeMap->getInternalFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000181}
182
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000183GLenum RenderbufferTextureCubeMap::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000184{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000185 return mTextureCubeMap->getActualFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000186}
187
188GLsizei RenderbufferTextureCubeMap::getSamples() const
189{
190 return 0;
191}
192
193unsigned int RenderbufferTextureCubeMap::getSerial() const
194{
195 return mTextureCubeMap->getRenderTargetSerial(mTarget);
196}
197
198////// Renderbuffer Implementation //////
199
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000200Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000201{
202 ASSERT(instance != NULL);
203 mInstance = instance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000204}
205
206Renderbuffer::~Renderbuffer()
207{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000208 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000209}
210
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000211// The RenderbufferInterface contained in this Renderbuffer may need to maintain
212// its own reference count, so we pass it on here.
213void Renderbuffer::addRef() const
214{
215 mInstance->addProxyRef(this);
216
217 RefCountObject::addRef();
218}
219
220void Renderbuffer::release() const
221{
222 mInstance->releaseProxy(this);
223
224 RefCountObject::release();
225}
226
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000227rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000228{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000229 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000230}
231
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000232rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000233{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000234 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000235}
236
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000237GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000238{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000239 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000240}
241
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000242GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000243{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000244 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000245}
246
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000247GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000248{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000249 return mInstance->getInternalFormat();
250}
251
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000252GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000253{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000254 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000255}
256
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000257GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000258{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000259 return mInstance->getRedSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000260}
261
262GLuint Renderbuffer::getGreenSize() const
263{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000264 return mInstance->getGreenSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000265}
266
267GLuint Renderbuffer::getBlueSize() const
268{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000269 return mInstance->getBlueSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000270}
271
272GLuint Renderbuffer::getAlphaSize() const
273{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000274 return mInstance->getAlphaSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000275}
276
277GLuint Renderbuffer::getDepthSize() const
278{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000279 return mInstance->getDepthSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000280}
281
282GLuint Renderbuffer::getStencilSize() const
283{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000284 return mInstance->getStencilSize();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000285}
286
287GLsizei Renderbuffer::getSamples() const
288{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000289 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000290}
291
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000292unsigned int Renderbuffer::getSerial() const
293{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000294 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000295}
296
297void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
298{
299 ASSERT(newStorage != NULL);
300
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000301 delete mInstance;
302 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000303}
304
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000305RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerial())
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000306{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000307 mWidth = 0;
308 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000309 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000310 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000311 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000312}
313
314RenderbufferStorage::~RenderbufferStorage()
315{
316}
317
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000318rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000319{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000320 return NULL;
321}
322
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000323rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000324{
325 return NULL;
326}
327
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000328GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000329{
330 return mWidth;
331}
332
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000333GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000334{
335 return mHeight;
336}
337
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000338GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000339{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000340 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000341}
342
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000343GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000344{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000345 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000346}
347
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000348GLsizei RenderbufferStorage::getSamples() const
349{
350 return mSamples;
351}
352
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000353unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000354{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000355 return mSerial;
356}
357
358unsigned int RenderbufferStorage::issueSerial()
359{
360 return mCurrentSerial++;
361}
362
363unsigned int RenderbufferStorage::issueCubeSerials()
364{
365 unsigned int firstSerial = mCurrentSerial;
366 mCurrentSerial += 6;
367 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000368}
369
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000370Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000371{
daniel@transgaming.coma27e05b2012-11-28 19:39:42 +0000372 rx::SwapChain9 *swapChain9 = static_cast<rx::SwapChain9*>(swapChain);
373 mRenderTarget = new rx::RenderTarget9(renderer, swapChain9->getRenderTarget());
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000374 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000375 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000376 mWidth = mRenderTarget->getWidth();
377 mHeight = mRenderTarget->getHeight();
378 mInternalFormat = mRenderTarget->getInternalFormat();
379 mActualFormat = mRenderTarget->getActualFormat();
380 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000381 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000382}
383
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000384Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000385{
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000386
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000387 mRenderTarget = new rx::RenderTarget9(renderer, width, height, format, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000388
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000389 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000390 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000391 mWidth = width;
392 mHeight = height;
393 mInternalFormat = format;
394 mActualFormat = mRenderTarget->getActualFormat();
395 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000396 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000397}
398
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000399Colorbuffer::~Colorbuffer()
400{
401 if (mRenderTarget)
402 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000403 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000404 }
405}
406
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000407rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000408{
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000409 if (mRenderTarget)
410 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000411 return mRenderTarget;
daniel@transgaming.com5e4dbb32011-11-11 04:10:18 +0000412 }
413
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000414 return NULL;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000415}
416
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000417DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000418{
daniel@transgaming.coma27e05b2012-11-28 19:39:42 +0000419 rx::SwapChain9 *swapChain9 = static_cast<rx::SwapChain9*>(swapChain);
420 mDepthStencil = new rx::RenderTarget9(renderer, swapChain9->getDepthStencil());
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000421 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000422 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000423 mWidth = mDepthStencil->getWidth();
424 mHeight = mDepthStencil->getHeight();
425 mInternalFormat = mDepthStencil->getInternalFormat();
426 mSamples = mDepthStencil->getSamples();
427 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000428 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000429}
430
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000431DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000432{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000433
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000434 mDepthStencil = new rx::RenderTarget9(renderer, width, height, GL_DEPTH24_STENCIL8_OES, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000435
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000436 mWidth = mDepthStencil->getWidth();
437 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000438 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000439 mActualFormat = mDepthStencil->getActualFormat();
440 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000441}
442
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000443DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000444{
445 if (mDepthStencil)
446 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000447 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000448 }
449}
450
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000451rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000452{
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000453 if (mDepthStencil)
454 {
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000455 return mDepthStencil;
daniel@transgaming.com63e6afe2012-05-31 01:14:42 +0000456 }
457
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000458 return NULL;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000459}
460
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000461Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000462{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000463 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000464 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000465 mInternalFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
466 // will expect one of the valid renderbuffer formats for use in
467 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000468 }
469}
470
471Depthbuffer::~Depthbuffer()
472{
473}
474
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000475Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000476{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000477 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000478 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000479 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
480 // will expect one of the valid renderbuffer formats for use in
481 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000482 }
483}
484
485Stencilbuffer::~Stencilbuffer()
486{
487}
488
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000489}