blob: a21fe2bdc38509696981da1d872d776fa5b4f64e [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
Geoff Langd5d8e392013-07-25 16:53:03 -0400168///// RenderbufferTexture3DLayer Implementation ////////
169
170RenderbufferTexture3DLayer::RenderbufferTexture3DLayer(Texture3D *texture, GLint level, GLint layer)
171 : mLevel(level), mLayer(layer)
172{
173 mTexture3D.set(texture);
174}
175
176RenderbufferTexture3DLayer::~RenderbufferTexture3DLayer()
177{
178 mTexture3D.set(NULL);
179}
180
181// Textures need to maintain their own reference count for references via
182// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
183void RenderbufferTexture3DLayer::addProxyRef(const Renderbuffer *proxy)
184{
185 mTexture3D->addProxyRef(proxy);
186}
187
188void RenderbufferTexture3DLayer::releaseProxy(const Renderbuffer *proxy)
189{
190 mTexture3D->releaseProxy(proxy);
191}
192
193rx::RenderTarget *RenderbufferTexture3DLayer::getRenderTarget()
194{
195 return mTexture3D->getRenderTarget(mLevel, mLayer);
196}
197
198rx::RenderTarget *RenderbufferTexture3DLayer::getDepthStencil()
199{
200 return mTexture3D->getDepthStencil(mLevel, mLayer);
201}
202
203GLsizei RenderbufferTexture3DLayer::getWidth() const
204{
205 return mTexture3D->getWidth(mLevel);
206}
207
208GLsizei RenderbufferTexture3DLayer::getHeight() const
209{
210 return mTexture3D->getHeight(mLevel);
211}
212
213GLenum RenderbufferTexture3DLayer::getInternalFormat() const
214{
215 return mTexture3D->getInternalFormat(mLevel);
216}
217
218GLenum RenderbufferTexture3DLayer::getActualFormat() const
219{
220 return mTexture3D->getActualFormat(mLevel);
221}
222
223GLsizei RenderbufferTexture3DLayer::getSamples() const
224{
225 return 0;
226}
227
228unsigned int RenderbufferTexture3DLayer::getSerial() const
229{
230 return mTexture3D->getRenderTargetSerial(mLevel, mLayer);
231}
232
233////// RenderbufferTexture2DArrayLayer Implementation //////
234
235RenderbufferTexture2DArrayLayer::RenderbufferTexture2DArrayLayer(Texture2DArray *texture, GLint level, GLint layer)
236 : mLevel(level), mLayer(layer)
237{
238 mTexture2DArray.set(texture);
239}
240
241RenderbufferTexture2DArrayLayer::~RenderbufferTexture2DArrayLayer()
242{
243 mTexture2DArray.set(NULL);
244}
245
246void RenderbufferTexture2DArrayLayer::addProxyRef(const Renderbuffer *proxy)
247{
248 mTexture2DArray->addProxyRef(proxy);
249}
250
251void RenderbufferTexture2DArrayLayer::releaseProxy(const Renderbuffer *proxy)
252{
253 mTexture2DArray->releaseProxy(proxy);
254}
255
256rx::RenderTarget *RenderbufferTexture2DArrayLayer::getRenderTarget()
257{
258 return mTexture2DArray->getRenderTarget(mLevel, mLayer);
259}
260
261rx::RenderTarget *RenderbufferTexture2DArrayLayer::getDepthStencil()
262{
263 return mTexture2DArray->getDepthStencil(mLevel, mLayer);
264}
265
266GLsizei RenderbufferTexture2DArrayLayer::getWidth() const
267{
268 return mTexture2DArray->getWidth(mLevel);
269}
270
271GLsizei RenderbufferTexture2DArrayLayer::getHeight() const
272{
273 return mTexture2DArray->getHeight(mLevel);
274}
275
276GLenum RenderbufferTexture2DArrayLayer::getInternalFormat() const
277{
278 return mTexture2DArray->getInternalFormat(mLevel);
279}
280
281GLenum RenderbufferTexture2DArrayLayer::getActualFormat() const
282{
283 return mTexture2DArray->getActualFormat(mLevel);
284}
285
286GLsizei RenderbufferTexture2DArrayLayer::getSamples() const
287{
288 return 0;
289}
290
291unsigned int RenderbufferTexture2DArrayLayer::getSerial() const
292{
293 return mTexture2DArray->getRenderTargetSerial(mLevel, mLayer);
294}
295
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000296////// Renderbuffer Implementation //////
297
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000298Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000299{
300 ASSERT(instance != NULL);
301 mInstance = instance;
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000302
303 ASSERT(renderer != NULL);
304 mRenderer = renderer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000305}
306
307Renderbuffer::~Renderbuffer()
308{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000309 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000310}
311
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000312// The RenderbufferInterface contained in this Renderbuffer may need to maintain
313// its own reference count, so we pass it on here.
314void Renderbuffer::addRef() const
315{
316 mInstance->addProxyRef(this);
317
318 RefCountObject::addRef();
319}
320
321void Renderbuffer::release() const
322{
323 mInstance->releaseProxy(this);
324
325 RefCountObject::release();
326}
327
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000328rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000329{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000330 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000331}
332
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000333rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000334{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000335 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000336}
337
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000338GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000339{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000340 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000341}
342
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000343GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000344{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000345 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000346}
347
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000348GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000349{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000350 return mInstance->getInternalFormat();
351}
352
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000353GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000354{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000355 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000356}
357
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000358GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000359{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000360 return gl::GetRedBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000361}
362
363GLuint Renderbuffer::getGreenSize() const
364{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000365 return gl::GetGreenBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000366}
367
368GLuint Renderbuffer::getBlueSize() const
369{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000370 return gl::GetBlueBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000371}
372
373GLuint Renderbuffer::getAlphaSize() const
374{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000375 return gl::GetAlphaBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000376}
377
378GLuint Renderbuffer::getDepthSize() const
379{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000380 return gl::GetDepthBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000381}
382
383GLuint Renderbuffer::getStencilSize() const
384{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000385 return gl::GetStencilBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000386}
387
Geoff Lang0a804792013-08-13 13:09:43 -0400388GLenum Renderbuffer::getComponentType() const
389{
390 return gl::GetComponentType(getActualFormat(), mRenderer->getCurrentClientVersion());
391}
392
393GLenum Renderbuffer::getColorEncoding() const
394{
395 return gl::GetColorEncoding(getActualFormat(), mRenderer->getCurrentClientVersion());
396}
397
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000398GLsizei Renderbuffer::getSamples() const
399{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000400 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000401}
402
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000403unsigned int Renderbuffer::getSerial() const
404{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000405 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000406}
407
408void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
409{
410 ASSERT(newStorage != NULL);
411
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000412 delete mInstance;
413 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000414}
415
Geoff Lang8040f572013-07-25 16:49:54 -0400416RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerials(1))
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000417{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000418 mWidth = 0;
419 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000420 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000421 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000422 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000423}
424
425RenderbufferStorage::~RenderbufferStorage()
426{
427}
428
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000429rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000430{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000431 return NULL;
432}
433
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000434rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000435{
436 return NULL;
437}
438
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000439GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000440{
441 return mWidth;
442}
443
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000444GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000445{
446 return mHeight;
447}
448
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000449GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000450{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000451 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000452}
453
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000454GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000455{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000456 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000457}
458
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000459GLsizei RenderbufferStorage::getSamples() const
460{
461 return mSamples;
462}
463
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000464unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000465{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000466 return mSerial;
467}
468
Geoff Lang8040f572013-07-25 16:49:54 -0400469unsigned int RenderbufferStorage::issueSerials(GLuint count)
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000470{
471 unsigned int firstSerial = mCurrentSerial;
Geoff Lang8040f572013-07-25 16:49:54 -0400472 mCurrentSerial += count;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000473 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000474}
475
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000476Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000477{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000478 mRenderTarget = renderer->createRenderTarget(swapChain, false);
479
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000480 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000481 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000482 mWidth = mRenderTarget->getWidth();
483 mHeight = mRenderTarget->getHeight();
484 mInternalFormat = mRenderTarget->getInternalFormat();
485 mActualFormat = mRenderTarget->getActualFormat();
486 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000487 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000488}
489
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000490Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000491{
Geoff Langa2d97f12013-06-11 11:44:02 -0400492 mRenderTarget = renderer->createRenderTarget(width, height, format, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000493
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000494 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000495 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000496 mWidth = width;
497 mHeight = height;
498 mInternalFormat = format;
499 mActualFormat = mRenderTarget->getActualFormat();
500 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000501 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000502}
503
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000504Colorbuffer::~Colorbuffer()
505{
506 if (mRenderTarget)
507 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000508 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000509 }
510}
511
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000512rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000513{
Geoff Lang8040f572013-07-25 16:49:54 -0400514 return mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000515}
516
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000517DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000518{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000519 mDepthStencil = renderer->createRenderTarget(swapChain, true);
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000520 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000521 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000522 mWidth = mDepthStencil->getWidth();
523 mHeight = mDepthStencil->getHeight();
524 mInternalFormat = mDepthStencil->getInternalFormat();
525 mSamples = mDepthStencil->getSamples();
526 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000527 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000528}
529
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000530DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000531{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000532
Geoff Langa2d97f12013-06-11 11:44:02 -0400533 mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000534
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000535 mWidth = mDepthStencil->getWidth();
536 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000537 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000538 mActualFormat = mDepthStencil->getActualFormat();
539 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000540}
541
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000542DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000543{
544 if (mDepthStencil)
545 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000546 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000547 }
548}
549
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000550rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000551{
Geoff Lang8040f572013-07-25 16:49:54 -0400552 return mDepthStencil;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000553}
554
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000555Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000556{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000557 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000558 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000559 mInternalFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
560 // will expect one of the valid renderbuffer formats for use in
561 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000562 }
563}
564
565Depthbuffer::~Depthbuffer()
566{
567}
568
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000569Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000570{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000571 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000572 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000573 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
574 // will expect one of the valid renderbuffer formats for use in
575 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000576 }
577}
578
579Stencilbuffer::~Stencilbuffer()
580{
581}
582
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000583}