blob: fd01cd5c213bde9d8c2bba72bdbdeeafaf7ddf67 [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
Jamie Madillbfcda812013-10-22 13:07:33 -0400103unsigned int RenderbufferTexture2D::getTextureSerial() const
104{
105 return mTexture2D->getTextureSerial();
106}
107
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000108///// RenderbufferTextureCubeMap Implementation ////////
109
Geoff Lang8040f572013-07-25 16:49:54 -0400110RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum faceTarget, GLint level)
111 : mFaceTarget(faceTarget), mLevel(level)
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000112{
113 mTextureCubeMap.set(texture);
114}
115
116RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap()
117{
118 mTextureCubeMap.set(NULL);
119}
120
121// Textures need to maintain their own reference count for references via
122// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
123void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
124{
125 mTextureCubeMap->addProxyRef(proxy);
126}
127
128void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
129{
130 mTextureCubeMap->releaseProxy(proxy);
131}
132
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000133rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000134{
Geoff Lang8040f572013-07-25 16:49:54 -0400135 return mTextureCubeMap->getRenderTarget(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000136}
137
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000138rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000139{
Geoff Lang8040f572013-07-25 16:49:54 -0400140 return mTextureCubeMap->getDepthStencil(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000141}
142
143GLsizei RenderbufferTextureCubeMap::getWidth() const
144{
Geoff Lang8040f572013-07-25 16:49:54 -0400145 return mTextureCubeMap->getWidth(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000146}
147
148GLsizei RenderbufferTextureCubeMap::getHeight() const
149{
Geoff Lang8040f572013-07-25 16:49:54 -0400150 return mTextureCubeMap->getHeight(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000151}
152
153GLenum RenderbufferTextureCubeMap::getInternalFormat() const
154{
Geoff Lang8040f572013-07-25 16:49:54 -0400155 return mTextureCubeMap->getInternalFormat(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000156}
157
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000158GLenum RenderbufferTextureCubeMap::getActualFormat() const
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000159{
Geoff Lang8040f572013-07-25 16:49:54 -0400160 return mTextureCubeMap->getActualFormat(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000161}
162
163GLsizei RenderbufferTextureCubeMap::getSamples() const
164{
165 return 0;
166}
167
168unsigned int RenderbufferTextureCubeMap::getSerial() const
169{
Geoff Lang8040f572013-07-25 16:49:54 -0400170 return mTextureCubeMap->getRenderTargetSerial(mFaceTarget, mLevel);
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000171}
172
Jamie Madillbfcda812013-10-22 13:07:33 -0400173unsigned int RenderbufferTextureCubeMap::getTextureSerial() const
174{
175 return mTextureCubeMap->getTextureSerial();
176}
177
Geoff Langd5d8e392013-07-25 16:53:03 -0400178///// RenderbufferTexture3DLayer Implementation ////////
179
180RenderbufferTexture3DLayer::RenderbufferTexture3DLayer(Texture3D *texture, GLint level, GLint layer)
181 : mLevel(level), mLayer(layer)
182{
183 mTexture3D.set(texture);
184}
185
186RenderbufferTexture3DLayer::~RenderbufferTexture3DLayer()
187{
188 mTexture3D.set(NULL);
189}
190
191// Textures need to maintain their own reference count for references via
192// Renderbuffers acting as proxies. Here, we notify the texture of a reference.
193void RenderbufferTexture3DLayer::addProxyRef(const Renderbuffer *proxy)
194{
195 mTexture3D->addProxyRef(proxy);
196}
197
198void RenderbufferTexture3DLayer::releaseProxy(const Renderbuffer *proxy)
199{
200 mTexture3D->releaseProxy(proxy);
201}
202
203rx::RenderTarget *RenderbufferTexture3DLayer::getRenderTarget()
204{
205 return mTexture3D->getRenderTarget(mLevel, mLayer);
206}
207
208rx::RenderTarget *RenderbufferTexture3DLayer::getDepthStencil()
209{
210 return mTexture3D->getDepthStencil(mLevel, mLayer);
211}
212
213GLsizei RenderbufferTexture3DLayer::getWidth() const
214{
215 return mTexture3D->getWidth(mLevel);
216}
217
218GLsizei RenderbufferTexture3DLayer::getHeight() const
219{
220 return mTexture3D->getHeight(mLevel);
221}
222
223GLenum RenderbufferTexture3DLayer::getInternalFormat() const
224{
225 return mTexture3D->getInternalFormat(mLevel);
226}
227
228GLenum RenderbufferTexture3DLayer::getActualFormat() const
229{
230 return mTexture3D->getActualFormat(mLevel);
231}
232
233GLsizei RenderbufferTexture3DLayer::getSamples() const
234{
235 return 0;
236}
237
238unsigned int RenderbufferTexture3DLayer::getSerial() const
239{
240 return mTexture3D->getRenderTargetSerial(mLevel, mLayer);
241}
242
Jamie Madillbfcda812013-10-22 13:07:33 -0400243unsigned int RenderbufferTexture3DLayer::getTextureSerial() const
244{
245 return mTexture3D->getTextureSerial();
246}
247
Geoff Langd5d8e392013-07-25 16:53:03 -0400248////// RenderbufferTexture2DArrayLayer Implementation //////
249
250RenderbufferTexture2DArrayLayer::RenderbufferTexture2DArrayLayer(Texture2DArray *texture, GLint level, GLint layer)
251 : mLevel(level), mLayer(layer)
252{
253 mTexture2DArray.set(texture);
254}
255
256RenderbufferTexture2DArrayLayer::~RenderbufferTexture2DArrayLayer()
257{
258 mTexture2DArray.set(NULL);
259}
260
261void RenderbufferTexture2DArrayLayer::addProxyRef(const Renderbuffer *proxy)
262{
263 mTexture2DArray->addProxyRef(proxy);
264}
265
266void RenderbufferTexture2DArrayLayer::releaseProxy(const Renderbuffer *proxy)
267{
268 mTexture2DArray->releaseProxy(proxy);
269}
270
271rx::RenderTarget *RenderbufferTexture2DArrayLayer::getRenderTarget()
272{
273 return mTexture2DArray->getRenderTarget(mLevel, mLayer);
274}
275
276rx::RenderTarget *RenderbufferTexture2DArrayLayer::getDepthStencil()
277{
278 return mTexture2DArray->getDepthStencil(mLevel, mLayer);
279}
280
281GLsizei RenderbufferTexture2DArrayLayer::getWidth() const
282{
283 return mTexture2DArray->getWidth(mLevel);
284}
285
286GLsizei RenderbufferTexture2DArrayLayer::getHeight() const
287{
288 return mTexture2DArray->getHeight(mLevel);
289}
290
291GLenum RenderbufferTexture2DArrayLayer::getInternalFormat() const
292{
293 return mTexture2DArray->getInternalFormat(mLevel);
294}
295
296GLenum RenderbufferTexture2DArrayLayer::getActualFormat() const
297{
298 return mTexture2DArray->getActualFormat(mLevel);
299}
300
301GLsizei RenderbufferTexture2DArrayLayer::getSamples() const
302{
303 return 0;
304}
305
306unsigned int RenderbufferTexture2DArrayLayer::getSerial() const
307{
308 return mTexture2DArray->getRenderTargetSerial(mLevel, mLayer);
309}
310
Jamie Madillbfcda812013-10-22 13:07:33 -0400311unsigned int RenderbufferTexture2DArrayLayer::getTextureSerial() const
312{
313 return mTexture2DArray->getTextureSerial();
314}
315
daniel@transgaming.com46f2d0a2012-05-09 15:49:06 +0000316////// Renderbuffer Implementation //////
317
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000318Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000319{
320 ASSERT(instance != NULL);
321 mInstance = instance;
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000322
323 ASSERT(renderer != NULL);
324 mRenderer = renderer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000325}
326
327Renderbuffer::~Renderbuffer()
328{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000329 delete mInstance;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000330}
331
daniel@transgaming.com2678b342012-01-18 16:29:40 +0000332// The RenderbufferInterface contained in this Renderbuffer may need to maintain
333// its own reference count, so we pass it on here.
334void Renderbuffer::addRef() const
335{
336 mInstance->addProxyRef(this);
337
338 RefCountObject::addRef();
339}
340
341void Renderbuffer::release() const
342{
343 mInstance->releaseProxy(this);
344
345 RefCountObject::release();
346}
347
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000348rx::RenderTarget *Renderbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000349{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000350 return mInstance->getRenderTarget();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000351}
352
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000353rx::RenderTarget *Renderbuffer::getDepthStencil()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000354{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000355 return mInstance->getDepthStencil();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000356}
357
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000358GLsizei Renderbuffer::getWidth() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000359{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000360 return mInstance->getWidth();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000361}
362
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000363GLsizei Renderbuffer::getHeight() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000364{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000365 return mInstance->getHeight();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000366}
367
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000368GLenum Renderbuffer::getInternalFormat() const
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000369{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000370 return mInstance->getInternalFormat();
371}
372
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000373GLenum Renderbuffer::getActualFormat() const
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000374{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000375 return mInstance->getActualFormat();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000376}
377
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000378GLuint Renderbuffer::getRedSize() const
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000379{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000380 return gl::GetRedBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000381}
382
383GLuint Renderbuffer::getGreenSize() const
384{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000385 return gl::GetGreenBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000386}
387
388GLuint Renderbuffer::getBlueSize() const
389{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000390 return gl::GetBlueBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000391}
392
393GLuint Renderbuffer::getAlphaSize() const
394{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000395 return gl::GetAlphaBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000396}
397
398GLuint Renderbuffer::getDepthSize() const
399{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000400 return gl::GetDepthBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000401}
402
403GLuint Renderbuffer::getStencilSize() const
404{
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +0000405 return gl::GetStencilBits(getActualFormat(), mRenderer->getCurrentClientVersion());
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000406}
407
Geoff Lang0a804792013-08-13 13:09:43 -0400408GLenum Renderbuffer::getComponentType() const
409{
410 return gl::GetComponentType(getActualFormat(), mRenderer->getCurrentClientVersion());
411}
412
413GLenum Renderbuffer::getColorEncoding() const
414{
415 return gl::GetColorEncoding(getActualFormat(), mRenderer->getCurrentClientVersion());
416}
417
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000418GLsizei Renderbuffer::getSamples() const
419{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000420 return mInstance->getSamples();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +0000421}
422
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000423unsigned int Renderbuffer::getSerial() const
424{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000425 return mInstance->getSerial();
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000426}
427
Jamie Madillbfcda812013-10-22 13:07:33 -0400428unsigned int Renderbuffer::getTextureSerial() const
429{
430 return mInstance->getTextureSerial();
431}
432
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000433void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
434{
435 ASSERT(newStorage != NULL);
436
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000437 delete mInstance;
438 mInstance = newStorage;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000439}
440
Geoff Lang8040f572013-07-25 16:49:54 -0400441RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerials(1))
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000442{
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000443 mWidth = 0;
444 mHeight = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000445 mInternalFormat = GL_RGBA4;
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000446 mActualFormat = GL_RGBA8_OES;
daniel@transgaming.com73a5db62010-10-15 17:58:13 +0000447 mSamples = 0;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000448}
449
450RenderbufferStorage::~RenderbufferStorage()
451{
452}
453
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000454rx::RenderTarget *RenderbufferStorage::getRenderTarget()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000455{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000456 return NULL;
457}
458
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000459rx::RenderTarget *RenderbufferStorage::getDepthStencil()
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000460{
461 return NULL;
462}
463
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000464GLsizei RenderbufferStorage::getWidth() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000465{
466 return mWidth;
467}
468
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000469GLsizei RenderbufferStorage::getHeight() const
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000470{
471 return mHeight;
472}
473
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000474GLenum RenderbufferStorage::getInternalFormat() const
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000475{
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000476 return mInternalFormat;
daniel@transgaming.com866f3182010-05-20 19:28:22 +0000477}
478
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000479GLenum RenderbufferStorage::getActualFormat() const
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000480{
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000481 return mActualFormat;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000482}
483
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000484GLsizei RenderbufferStorage::getSamples() const
485{
486 return mSamples;
487}
488
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000489unsigned int RenderbufferStorage::getSerial() const
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000490{
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000491 return mSerial;
492}
493
Geoff Lang8040f572013-07-25 16:49:54 -0400494unsigned int RenderbufferStorage::issueSerials(GLuint count)
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000495{
496 unsigned int firstSerial = mCurrentSerial;
Geoff Lang8040f572013-07-25 16:49:54 -0400497 mCurrentSerial += count;
daniel@transgaming.comfbc39522011-11-11 04:10:28 +0000498 return firstSerial;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000499}
500
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000501Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000502{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000503 mRenderTarget = renderer->createRenderTarget(swapChain, false);
504
daniel@transgaming.com96c38932012-10-31 18:42:52 +0000505 if (mRenderTarget)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000506 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000507 mWidth = mRenderTarget->getWidth();
508 mHeight = mRenderTarget->getHeight();
509 mInternalFormat = mRenderTarget->getInternalFormat();
510 mActualFormat = mRenderTarget->getActualFormat();
511 mSamples = mRenderTarget->getSamples();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000512 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000513}
514
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000515Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000516{
Geoff Langa2d97f12013-06-11 11:44:02 -0400517 mRenderTarget = renderer->createRenderTarget(width, height, format, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000518
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000519 if (mRenderTarget)
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000520 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000521 mWidth = width;
522 mHeight = height;
523 mInternalFormat = format;
524 mActualFormat = mRenderTarget->getActualFormat();
525 mSamples = mRenderTarget->getSamples();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000526 }
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000527}
528
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000529Colorbuffer::~Colorbuffer()
530{
531 if (mRenderTarget)
532 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000533 delete mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000534 }
535}
536
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000537rx::RenderTarget *Colorbuffer::getRenderTarget()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000538{
Geoff Lang8040f572013-07-25 16:49:54 -0400539 return mRenderTarget;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000540}
541
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000542DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000543{
daniel@transgaming.comf2423652012-11-28 20:53:50 +0000544 mDepthStencil = renderer->createRenderTarget(swapChain, true);
daniel@transgaming.com024786d2012-10-31 18:42:55 +0000545 if (mDepthStencil)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000546 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000547 mWidth = mDepthStencil->getWidth();
548 mHeight = mDepthStencil->getHeight();
549 mInternalFormat = mDepthStencil->getInternalFormat();
550 mSamples = mDepthStencil->getSamples();
551 mActualFormat = mDepthStencil->getActualFormat();
daniel@transgaming.comca7c0082010-08-24 19:20:20 +0000552 }
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000553}
554
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000555DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000556{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000557
Geoff Langa2d97f12013-06-11 11:44:02 -0400558 mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000559
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000560 mWidth = mDepthStencil->getWidth();
561 mHeight = mDepthStencil->getHeight();
apatrick@chromium.org831fe2a2011-03-17 18:44:29 +0000562 mInternalFormat = GL_DEPTH24_STENCIL8_OES;
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000563 mActualFormat = mDepthStencil->getActualFormat();
564 mSamples = mDepthStencil->getSamples();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000565}
566
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000567DepthStencilbuffer::~DepthStencilbuffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000568{
569 if (mDepthStencil)
570 {
daniel@transgaming.com042d1b42012-11-28 19:37:09 +0000571 delete mDepthStencil;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000572 }
573}
574
daniel@transgaming.comd186dc72012-11-28 19:40:16 +0000575rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000576{
Geoff Lang8040f572013-07-25 16:49:54 -0400577 return mDepthStencil;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000578}
579
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000580Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000581{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000582 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000583 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000584 mInternalFormat = GL_DEPTH_COMPONENT16; // If the renderbuffer parameters are queried, the calling function
585 // will expect one of the valid renderbuffer formats for use in
586 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000587 }
588}
589
590Depthbuffer::~Depthbuffer()
591{
592}
593
daniel@transgaming.com70062c92012-11-28 19:32:30 +0000594Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000595{
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000596 if (mDepthStencil)
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000597 {
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000598 mInternalFormat = GL_STENCIL_INDEX8; // If the renderbuffer parameters are queried, the calling function
599 // will expect one of the valid renderbuffer formats for use in
600 // glRenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000601 }
602}
603
604Stencilbuffer::~Stencilbuffer()
605{
606}
607
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000608}