14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 24f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. 34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 79ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// Renderbuffer.h: Defines the wrapper class gl::Renderbuffer, as well as the 89ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// class hierarchy used to store its contents: RenderbufferStorage, Colorbuffer, 99ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// DepthStencilbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer 104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108. 114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#ifndef LIBGLESV2_RENDERBUFFER_H_ 134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#define LIBGLESV2_RENDERBUFFER_H_ 144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 15f51639a4d10c6b31a813a8154ed2c489cc7e55f3Jamie Madill#include "angle_gl.h" 164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 17ea0e1af4c3db538081d776e4ec1a588ca82cb9d9alokp@chromium.org#include "common/angleutils.h" 18b66a70156d33b0712fae267c6697af55e22bf8b6apatrick@chromium.org#include "common/RefCountObject.h" 194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2070062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.comnamespace rx 2170062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com{ 2270062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.comclass Renderer; 23d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.comclass SwapChain; 24d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.comclass RenderTarget; 25391c8c503e9597e258d2af485cb3fd824da1fc76Geoff Langclass TextureStorage; 2670062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com} 2770062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com 284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comnamespace gl 294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 306c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madillclass RenderbufferStorage; 31e261b44af7631c31ddca8601490e7445af5a3341Jamie Madillclass FramebufferAttachment; 326c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill 336c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill// A GL renderbuffer object is usually used as a depth or stencil buffer attachment 346c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill// for a framebuffer object. The renderbuffer itself is a distinct GL object, see 356c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill// FramebufferAttachment and Framebuffer for how they are applied to an FBO via an 366c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill// attachment point. 376c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill 386c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madillclass Renderbuffer : public RefCountObject 396c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill{ 406c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill public: 41e4a492be45f39dffaea53c3523064844ee56e41bGeoff Lang Renderbuffer(GLuint id, RenderbufferStorage *newStorage); 4275c42f45e51cbabecf21a5f0065ebec18f7306b6Cooper Partin virtual ~Renderbuffer(); 436c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill 446c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill void setStorage(RenderbufferStorage *newStorage); 456c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill RenderbufferStorage *getStorage(); 466c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill 476c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLsizei getWidth() const; 486c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLsizei getHeight() const; 496c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLenum getInternalFormat() const; 506c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLenum getActualFormat() const; 516c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLsizei getSamples() const; 526c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLuint getRedSize() const; 536c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLuint getGreenSize() const; 546c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLuint getBlueSize() const; 556c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLuint getAlphaSize() const; 566c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLuint getDepthSize() const; 576c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill GLuint getStencilSize() const; 586c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill 596c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill private: 606c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill RenderbufferStorage *mStorage; 616c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill}; 62d5d8e393a793d1bde88546ae6804e33535be4a49Geoff Lang 639ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// A class derived from RenderbufferStorage is created whenever glRenderbufferStorage 649ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// is called. The specific concrete type depends on whether the internal format is 659ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// colour depth, stencil or packed depth/stencil. 666c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madillclass RenderbufferStorage 674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com public: 699ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com RenderbufferStorage(); 704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 719ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com virtual ~RenderbufferStorage() = 0; 724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 73d186dc7febccce89bda20a00f511977deff0f434daniel@transgaming.com virtual rx::RenderTarget *getRenderTarget(); 744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 75d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com virtual GLsizei getWidth() const; 76d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com virtual GLsizei getHeight() const; 77d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com virtual GLenum getInternalFormat() const; 7820d36667199abc703cddff58ebdfd5eef726a51cdaniel@transgaming.com virtual GLenum getActualFormat() const; 79d14558a2178bea5615e09534d11c0d99c329e603daniel@transgaming.com virtual GLsizei getSamples() const; 804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 81fbc3952478be8b297e57097a70afbf42a0caff06daniel@transgaming.com virtual unsigned int getSerial() const; 82784371d02a86e44b51ec4944b0077ba771cfce43Geoff Lang 83784371d02a86e44b51ec4944b0077ba771cfce43Geoff Lang virtual bool isTexture() const; 84784371d02a86e44b51ec4944b0077ba771cfce43Geoff Lang virtual unsigned int getTextureSerial() const; 85fbc3952478be8b297e57097a70afbf42a0caff06daniel@transgaming.com 86c483326b7164e1c96a714db86167647c41e8f65bJamie Madill static unsigned int issueSerials(unsigned int count); 87fbc3952478be8b297e57097a70afbf42a0caff06daniel@transgaming.com 884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com protected: 89d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com GLsizei mWidth; 90d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com GLsizei mHeight; 91d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com GLenum mInternalFormat; 9220d36667199abc703cddff58ebdfd5eef726a51cdaniel@transgaming.com GLenum mActualFormat; 931f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com GLsizei mSamples; 944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com private: 969ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage); 97fbc3952478be8b297e57097a70afbf42a0caff06daniel@transgaming.com 98fbc3952478be8b297e57097a70afbf42a0caff06daniel@transgaming.com const unsigned int mSerial; 99fbc3952478be8b297e57097a70afbf42a0caff06daniel@transgaming.com 100fbc3952478be8b297e57097a70afbf42a0caff06daniel@transgaming.com static unsigned int mCurrentSerial; 1014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}; 1024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1039ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.comclass Colorbuffer : public RenderbufferStorage 1044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 1054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com public: 10670062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain); 10770062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com Colorbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples); 1084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 109d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com virtual ~Colorbuffer(); 1104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 111d186dc7febccce89bda20a00f511977deff0f434daniel@transgaming.com virtual rx::RenderTarget *getRenderTarget(); 1124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com private: 1144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(Colorbuffer); 115d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com 116042d1b4c8b5dc1bff96dc81b99f2844af21b62a7daniel@transgaming.com rx::RenderTarget *mRenderTarget; 1174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}; 1184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1199ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.comclass DepthStencilbuffer : public RenderbufferStorage 1204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 1214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com public: 12270062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain); 12370062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com DepthStencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples); 1244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 125cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com ~DepthStencilbuffer(); 1264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 127685dd27a259cfa0127b20a32f223d00a7c020ef1Jamie Madill virtual rx::RenderTarget *getRenderTarget(); 1284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 129d14558a2178bea5615e09534d11c0d99c329e603daniel@transgaming.com protected: 130042d1b4c8b5dc1bff96dc81b99f2844af21b62a7daniel@transgaming.com rx::RenderTarget *mDepthStencil; 131d14558a2178bea5615e09534d11c0d99c329e603daniel@transgaming.com 1324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com private: 133cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer); 1344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}; 1354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 136cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.comclass Depthbuffer : public DepthStencilbuffer 137cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com{ 138cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com public: 13970062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com Depthbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples); 140cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com 141d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com virtual ~Depthbuffer(); 142cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com 143cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com private: 144cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(Depthbuffer); 145cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com}; 146cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.com 147cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.comclass Stencilbuffer : public DepthStencilbuffer 1484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 1494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com public: 15070062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com Stencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples); 1514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 152d2fd4f2afe46822fed817c1ac850afe9daadf21cdaniel@transgaming.com virtual ~Stencilbuffer(); 1534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com private: 1554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(Stencilbuffer); 1564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}; 1576c7b4ada6bcb8ec0d929ff929b33f07c653d8e82Jamie Madill 1584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 1594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#endif // LIBGLESV2_RENDERBUFFER_H_ 161