Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / Renderbuffer.h
1 //
2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3 // 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.h: Defines the wrapper class gl::Renderbuffer, as well as the
8 // class hierarchy used to store its contents: RenderbufferStorage, Colorbuffer,
9 // DepthStencilbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
10 // objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
11
12 #ifndef LIBGLESV2_RENDERBUFFER_H_
13 #define LIBGLESV2_RENDERBUFFER_H_
14
15 #include "angle_gl.h"
16
17 #include "common/angleutils.h"
18 #include "common/RefCountObject.h"
19
20 namespace rx
21 {
22 class Renderer;
23 class SwapChain;
24 class RenderTarget;
25 class TextureStorage;
26 }
27
28 namespace gl
29 {
30 class RenderbufferStorage;
31 class FramebufferAttachment;
32
33 // A GL renderbuffer object is usually used as a depth or stencil buffer attachment
34 // for a framebuffer object. The renderbuffer itself is a distinct GL object, see
35 // FramebufferAttachment and Framebuffer for how they are applied to an FBO via an
36 // attachment point.
37
38 class Renderbuffer : public RefCountObject
39 {
40   public:
41     Renderbuffer(GLuint id, RenderbufferStorage *newStorage);
42     virtual ~Renderbuffer();
43
44     void setStorage(RenderbufferStorage *newStorage);
45     RenderbufferStorage *getStorage();
46
47     GLsizei getWidth() const;
48     GLsizei getHeight() const;
49     GLenum getInternalFormat() const;
50     GLenum getActualFormat() const;
51     GLsizei getSamples() const;
52     GLuint getRedSize() const;
53     GLuint getGreenSize() const;
54     GLuint getBlueSize() const;
55     GLuint getAlphaSize() const;
56     GLuint getDepthSize() const;
57     GLuint getStencilSize() const;
58
59   private:
60     RenderbufferStorage *mStorage;
61 };
62
63 // A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
64 // is called. The specific concrete type depends on whether the internal format is
65 // colour depth, stencil or packed depth/stencil.
66 class RenderbufferStorage
67 {
68   public:
69     RenderbufferStorage();
70
71     virtual ~RenderbufferStorage() = 0;
72
73     virtual rx::RenderTarget *getRenderTarget();
74
75     virtual GLsizei getWidth() const;
76     virtual GLsizei getHeight() const;
77     virtual GLenum getInternalFormat() const;
78     virtual GLenum getActualFormat() const;
79     virtual GLsizei getSamples() const;
80
81     virtual unsigned int getSerial() const;
82
83     virtual bool isTexture() const;
84     virtual unsigned int getTextureSerial() const;
85
86     static unsigned int issueSerials(unsigned int count);
87
88   protected:
89     GLsizei mWidth;
90     GLsizei mHeight;
91     GLenum mInternalFormat;
92     GLenum mActualFormat;
93     GLsizei mSamples;
94
95   private:
96     DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage);
97
98     const unsigned int mSerial;
99
100     static unsigned int mCurrentSerial;
101 };
102
103 class Colorbuffer : public RenderbufferStorage
104 {
105   public:
106     Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
107     Colorbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples);
108
109     virtual ~Colorbuffer();
110
111     virtual rx::RenderTarget *getRenderTarget();
112
113   private:
114     DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
115
116     rx::RenderTarget *mRenderTarget;
117 };
118
119 class DepthStencilbuffer : public RenderbufferStorage
120 {
121   public:
122     DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
123     DepthStencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
124
125     ~DepthStencilbuffer();
126
127     virtual rx::RenderTarget *getRenderTarget();
128
129   protected:
130     rx::RenderTarget  *mDepthStencil;
131
132   private:
133     DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer);
134 };
135
136 class Depthbuffer : public DepthStencilbuffer
137 {
138   public:
139     Depthbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
140
141     virtual ~Depthbuffer();
142
143   private:
144     DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
145 };
146
147 class Stencilbuffer : public DepthStencilbuffer
148 {
149   public:
150     Stencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
151
152     virtual ~Stencilbuffer();
153
154   private:
155     DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
156 };
157
158 }
159
160 #endif   // LIBGLESV2_RENDERBUFFER_H_