blob: 8e745d2494f1f6eee39dfbded0f110c124bbb17f [file] [log] [blame]
Jamie Madillafc21c02014-06-04 15:29:47 -04001//
2// Copyright (c) 2014 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// FramebufferAttachment.cpp: the gl::FramebufferAttachment class and its derived classes
8// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
9
Geoff Lang2b5420c2014-11-19 14:20:15 -050010#include "libANGLE/FramebufferAttachment.h"
Geoff Lang0b7eef72014-06-12 14:10:47 -040011
12#include "common/utilities.h"
Jamie Madill811b6352015-02-09 10:17:09 -050013#include "libANGLE/Renderbuffer.h"
14#include "libANGLE/Texture.h"
15#include "libANGLE/formatutils.h"
16#include "libANGLE/renderer/DefaultAttachmentImpl.h"
17#include "libANGLE/renderer/FramebufferImpl.h"
Jamie Madillafc21c02014-06-04 15:29:47 -040018
19namespace gl
20{
21
Jamie Madillafc21c02014-06-04 15:29:47 -040022////// FramebufferAttachment Implementation //////
23
Jamie Madillaef95de2014-09-05 10:12:41 -040024FramebufferAttachment::FramebufferAttachment(GLenum binding)
25 : mBinding(binding)
Jamie Madillafc21c02014-06-04 15:29:47 -040026{
Jamie Madillafc21c02014-06-04 15:29:47 -040027}
28
29FramebufferAttachment::~FramebufferAttachment()
30{
Jamie Madillafc21c02014-06-04 15:29:47 -040031}
32
Geoff Lange4a492b2014-06-19 14:14:41 -040033GLuint FramebufferAttachment::getRedSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040034{
Geoff Langd8a22582014-12-17 15:28:23 -050035 return GetInternalFormatInfo(getInternalFormat()).redBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040036}
37
Geoff Lange4a492b2014-06-19 14:14:41 -040038GLuint FramebufferAttachment::getGreenSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040039{
Geoff Langd8a22582014-12-17 15:28:23 -050040 return GetInternalFormatInfo(getInternalFormat()).greenBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040041}
42
Geoff Lange4a492b2014-06-19 14:14:41 -040043GLuint FramebufferAttachment::getBlueSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040044{
Geoff Langd8a22582014-12-17 15:28:23 -050045 return GetInternalFormatInfo(getInternalFormat()).blueBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040046}
47
Geoff Lange4a492b2014-06-19 14:14:41 -040048GLuint FramebufferAttachment::getAlphaSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040049{
Geoff Langd8a22582014-12-17 15:28:23 -050050 return GetInternalFormatInfo(getInternalFormat()).alphaBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040051}
52
Geoff Lange4a492b2014-06-19 14:14:41 -040053GLuint FramebufferAttachment::getDepthSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040054{
Geoff Langd8a22582014-12-17 15:28:23 -050055 return GetInternalFormatInfo(getInternalFormat()).depthBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040056}
57
Geoff Lange4a492b2014-06-19 14:14:41 -040058GLuint FramebufferAttachment::getStencilSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040059{
Geoff Langd8a22582014-12-17 15:28:23 -050060 return GetInternalFormatInfo(getInternalFormat()).stencilBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040061}
62
Geoff Lange4a492b2014-06-19 14:14:41 -040063GLenum FramebufferAttachment::getComponentType() const
Jamie Madillafc21c02014-06-04 15:29:47 -040064{
Geoff Langd8a22582014-12-17 15:28:23 -050065 return GetInternalFormatInfo(getInternalFormat()).componentType;
Jamie Madillafc21c02014-06-04 15:29:47 -040066}
67
Geoff Lange4a492b2014-06-19 14:14:41 -040068GLenum FramebufferAttachment::getColorEncoding() const
Jamie Madillafc21c02014-06-04 15:29:47 -040069{
Geoff Langd8a22582014-12-17 15:28:23 -050070 return GetInternalFormatInfo(getInternalFormat()).colorEncoding;
Jamie Madillafc21c02014-06-04 15:29:47 -040071}
72
Jamie Madill3592a332014-09-03 15:07:15 -040073///// TextureAttachment Implementation ////////
74
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040075TextureAttachment::TextureAttachment(GLenum binding, Texture *texture, const ImageIndex &index)
Jamie Madillde3ed702014-09-03 15:07:17 -040076 : FramebufferAttachment(binding),
77 mIndex(index)
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040078{
79 mTexture.set(texture);
80}
81
82TextureAttachment::~TextureAttachment()
83{
84 mTexture.set(NULL);
85}
Jamie Madillaef95de2014-09-05 10:12:41 -040086
Jamie Madill3592a332014-09-03 15:07:15 -040087GLsizei TextureAttachment::getSamples() const
88{
89 return 0;
90}
91
92GLuint TextureAttachment::id() const
93{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040094 return mTexture->id();
Jamie Madill3592a332014-09-03 15:07:15 -040095}
96
Jamie Madillde3ed702014-09-03 15:07:17 -040097GLsizei TextureAttachment::getWidth() const
98{
Geoff Langa9be0dc2014-12-17 12:34:40 -050099 return mTexture->getWidth(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400100}
101
102GLsizei TextureAttachment::getHeight() const
103{
Geoff Langa9be0dc2014-12-17 12:34:40 -0500104 return mTexture->getHeight(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400105}
106
107GLenum TextureAttachment::getInternalFormat() const
108{
Geoff Langa9be0dc2014-12-17 12:34:40 -0500109 return mTexture->getInternalFormat(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400110}
111
Jamie Madillde3ed702014-09-03 15:07:17 -0400112GLenum TextureAttachment::type() const
113{
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500114 return GL_TEXTURE;
Jamie Madillde3ed702014-09-03 15:07:17 -0400115}
116
117GLint TextureAttachment::mipLevel() const
118{
119 return mIndex.mipIndex;
120}
121
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500122GLenum TextureAttachment::cubeMapFace() const
123{
Geoff Lang691e58c2014-12-19 17:03:25 -0500124 return IsCubeMapTextureTarget(mIndex.type) ? mIndex.type : GL_NONE;
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500125}
126
Jamie Madillde3ed702014-09-03 15:07:17 -0400127GLint TextureAttachment::layer() const
128{
129 return mIndex.layerIndex;
130}
131
Geoff Lang4f4207f2014-12-01 10:07:56 -0500132Texture *TextureAttachment::getTexture() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400133{
134 return mTexture.get();
135}
136
Jamie Madillac7579c2014-09-17 16:59:33 -0400137const ImageIndex *TextureAttachment::getTextureImageIndex() const
138{
139 return &mIndex;
140}
141
Geoff Lang4f4207f2014-12-01 10:07:56 -0500142Renderbuffer *TextureAttachment::getRenderbuffer() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400143{
144 UNREACHABLE();
145 return NULL;
146}
147
Jamie Madille261b442014-06-25 12:42:21 -0400148////// RenderbufferAttachment Implementation //////
149
Jamie Madillaef95de2014-09-05 10:12:41 -0400150RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer)
151 : FramebufferAttachment(binding)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400152{
153 ASSERT(renderbuffer);
154 mRenderbuffer.set(renderbuffer);
155}
156
157RenderbufferAttachment::~RenderbufferAttachment()
158{
159 mRenderbuffer.set(NULL);
160}
161
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400162GLsizei RenderbufferAttachment::getWidth() const
163{
164 return mRenderbuffer->getWidth();
165}
166
167GLsizei RenderbufferAttachment::getHeight() const
168{
169 return mRenderbuffer->getHeight();
170}
171
172GLenum RenderbufferAttachment::getInternalFormat() const
173{
174 return mRenderbuffer->getInternalFormat();
175}
176
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400177GLsizei RenderbufferAttachment::getSamples() const
178{
Shannon Woodse2632d22014-10-17 13:08:51 -0400179 return mRenderbuffer->getSamples();
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400180}
181
Jamie Madill218b6ed2014-06-16 10:34:01 -0400182GLuint RenderbufferAttachment::id() const
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400183{
Jamie Madill218b6ed2014-06-16 10:34:01 -0400184 return mRenderbuffer->id();
185}
186
187GLenum RenderbufferAttachment::type() const
188{
189 return GL_RENDERBUFFER;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400190}
191
Jamie Madill9c074a32014-06-16 10:34:02 -0400192GLint RenderbufferAttachment::mipLevel() const
193{
194 return 0;
195}
196
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500197GLenum RenderbufferAttachment::cubeMapFace() const
198{
199 return GL_NONE;
200}
201
Jamie Madill9c074a32014-06-16 10:34:02 -0400202GLint RenderbufferAttachment::layer() const
203{
204 return 0;
205}
206
Geoff Lang4f4207f2014-12-01 10:07:56 -0500207Texture *RenderbufferAttachment::getTexture() const
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400208{
209 UNREACHABLE();
Jamie Madill5b5d1242014-09-09 15:15:36 -0400210 return NULL;
211}
212
Jamie Madillac7579c2014-09-17 16:59:33 -0400213const ImageIndex *RenderbufferAttachment::getTextureImageIndex() const
214{
215 UNREACHABLE();
216 return NULL;
217}
218
Geoff Lang4f4207f2014-12-01 10:07:56 -0500219Renderbuffer *RenderbufferAttachment::getRenderbuffer() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400220{
221 return mRenderbuffer.get();
Jamie Madillafc21c02014-06-04 15:29:47 -0400222}
223
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500224
225DefaultAttachment::DefaultAttachment(GLenum binding, rx::DefaultAttachmentImpl *impl)
226 : FramebufferAttachment(binding),
227 mImpl(impl)
228{
229 ASSERT(mImpl);
230}
231
232DefaultAttachment::~DefaultAttachment()
233{
234 SafeDelete(mImpl);
235}
236
237GLsizei DefaultAttachment::getWidth() const
238{
239 return mImpl->getWidth();
240}
241
242GLsizei DefaultAttachment::getHeight() const
243{
244 return mImpl->getHeight();
245}
246
247GLenum DefaultAttachment::getInternalFormat() const
248{
249 return mImpl->getInternalFormat();
250}
251
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500252GLsizei DefaultAttachment::getSamples() const
253{
254 return mImpl->getSamples();
255}
256
257GLuint DefaultAttachment::id() const
258{
259 return 0;
260}
261
262GLenum DefaultAttachment::type() const
263{
264 return GL_FRAMEBUFFER_DEFAULT;
265}
266
267GLint DefaultAttachment::mipLevel() const
268{
269 return 0;
270}
271
272GLenum DefaultAttachment::cubeMapFace() const
273{
274 return GL_NONE;
275}
276
277GLint DefaultAttachment::layer() const
278{
279 return 0;
280}
281
Geoff Lang4f4207f2014-12-01 10:07:56 -0500282Texture *DefaultAttachment::getTexture() const
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500283{
284 UNREACHABLE();
285 return NULL;
286}
287
288const ImageIndex *DefaultAttachment::getTextureImageIndex() const
289{
290 UNREACHABLE();
291 return NULL;
292}
293
Geoff Lang4f4207f2014-12-01 10:07:56 -0500294Renderbuffer *DefaultAttachment::getRenderbuffer() const
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500295{
296 UNREACHABLE();
297 return NULL;
298}
299
300rx::DefaultAttachmentImpl *DefaultAttachment::getImplementation() const
301{
302 return mImpl;
303}
304
Jamie Madillafc21c02014-06-04 15:29:47 -0400305}