blob: d09a78a760bdf8a7dc3b69eb518577c4ed59a76f [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"
11#include "libANGLE/Texture.h"
12#include "libANGLE/formatutils.h"
13#include "libANGLE/Renderbuffer.h"
14#include "libANGLE/renderer/FramebufferImpl.h"
15#include "libANGLE/renderer/RenderTarget.h"
16#include "libANGLE/renderer/Renderer.h"
17#include "libANGLE/renderer/d3d/TextureStorage.h"
Geoff Lang0b7eef72014-06-12 14:10:47 -040018
19#include "common/utilities.h"
Jamie Madillafc21c02014-06-04 15:29:47 -040020
21namespace gl
22{
23
Jamie Madillafc21c02014-06-04 15:29:47 -040024////// FramebufferAttachment Implementation //////
25
Jamie Madillaef95de2014-09-05 10:12:41 -040026FramebufferAttachment::FramebufferAttachment(GLenum binding)
27 : mBinding(binding)
Jamie Madillafc21c02014-06-04 15:29:47 -040028{
Jamie Madillafc21c02014-06-04 15:29:47 -040029}
30
31FramebufferAttachment::~FramebufferAttachment()
32{
Jamie Madillafc21c02014-06-04 15:29:47 -040033}
34
Geoff Lange4a492b2014-06-19 14:14:41 -040035GLuint FramebufferAttachment::getRedSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040036{
Geoff Langd8a22582014-12-17 15:28:23 -050037 return GetInternalFormatInfo(getInternalFormat()).redBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040038}
39
Geoff Lange4a492b2014-06-19 14:14:41 -040040GLuint FramebufferAttachment::getGreenSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040041{
Geoff Langd8a22582014-12-17 15:28:23 -050042 return GetInternalFormatInfo(getInternalFormat()).greenBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040043}
44
Geoff Lange4a492b2014-06-19 14:14:41 -040045GLuint FramebufferAttachment::getBlueSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040046{
Geoff Langd8a22582014-12-17 15:28:23 -050047 return GetInternalFormatInfo(getInternalFormat()).blueBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040048}
49
Geoff Lange4a492b2014-06-19 14:14:41 -040050GLuint FramebufferAttachment::getAlphaSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040051{
Geoff Langd8a22582014-12-17 15:28:23 -050052 return GetInternalFormatInfo(getInternalFormat()).alphaBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040053}
54
Geoff Lange4a492b2014-06-19 14:14:41 -040055GLuint FramebufferAttachment::getDepthSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040056{
Geoff Langd8a22582014-12-17 15:28:23 -050057 return GetInternalFormatInfo(getInternalFormat()).depthBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040058}
59
Geoff Lange4a492b2014-06-19 14:14:41 -040060GLuint FramebufferAttachment::getStencilSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040061{
Geoff Langd8a22582014-12-17 15:28:23 -050062 return GetInternalFormatInfo(getInternalFormat()).stencilBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040063}
64
Geoff Lange4a492b2014-06-19 14:14:41 -040065GLenum FramebufferAttachment::getComponentType() const
Jamie Madillafc21c02014-06-04 15:29:47 -040066{
Geoff Langd8a22582014-12-17 15:28:23 -050067 return GetInternalFormatInfo(getInternalFormat()).componentType;
Jamie Madillafc21c02014-06-04 15:29:47 -040068}
69
Geoff Lange4a492b2014-06-19 14:14:41 -040070GLenum FramebufferAttachment::getColorEncoding() const
Jamie Madillafc21c02014-06-04 15:29:47 -040071{
Geoff Langd8a22582014-12-17 15:28:23 -050072 return GetInternalFormatInfo(getInternalFormat()).colorEncoding;
Jamie Madillafc21c02014-06-04 15:29:47 -040073}
74
Jamie Madill3592a332014-09-03 15:07:15 -040075///// TextureAttachment Implementation ////////
76
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040077TextureAttachment::TextureAttachment(GLenum binding, Texture *texture, const ImageIndex &index)
Jamie Madillde3ed702014-09-03 15:07:17 -040078 : FramebufferAttachment(binding),
79 mIndex(index)
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040080{
81 mTexture.set(texture);
82}
83
84TextureAttachment::~TextureAttachment()
85{
86 mTexture.set(NULL);
87}
Jamie Madillaef95de2014-09-05 10:12:41 -040088
Jamie Madill3592a332014-09-03 15:07:15 -040089GLsizei TextureAttachment::getSamples() const
90{
91 return 0;
92}
93
94GLuint TextureAttachment::id() const
95{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040096 return mTexture->id();
Jamie Madill3592a332014-09-03 15:07:15 -040097}
98
Jamie Madillde3ed702014-09-03 15:07:17 -040099GLsizei TextureAttachment::getWidth() const
100{
Geoff Langa9be0dc2014-12-17 12:34:40 -0500101 return mTexture->getWidth(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400102}
103
104GLsizei TextureAttachment::getHeight() const
105{
Geoff Langa9be0dc2014-12-17 12:34:40 -0500106 return mTexture->getHeight(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400107}
108
109GLenum TextureAttachment::getInternalFormat() const
110{
Geoff Langa9be0dc2014-12-17 12:34:40 -0500111 return mTexture->getInternalFormat(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400112}
113
Jamie Madillde3ed702014-09-03 15:07:17 -0400114GLenum TextureAttachment::type() const
115{
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500116 return GL_TEXTURE;
Jamie Madillde3ed702014-09-03 15:07:17 -0400117}
118
119GLint TextureAttachment::mipLevel() const
120{
121 return mIndex.mipIndex;
122}
123
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500124GLenum TextureAttachment::cubeMapFace() const
125{
126 return IsCubemapTextureTarget(mIndex.type) ? mIndex.type : GL_NONE;
127}
128
Jamie Madillde3ed702014-09-03 15:07:17 -0400129GLint TextureAttachment::layer() const
130{
131 return mIndex.layerIndex;
132}
133
Geoff Lang4f4207f2014-12-01 10:07:56 -0500134Texture *TextureAttachment::getTexture() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400135{
136 return mTexture.get();
137}
138
Jamie Madillac7579c2014-09-17 16:59:33 -0400139const ImageIndex *TextureAttachment::getTextureImageIndex() const
140{
141 return &mIndex;
142}
143
Geoff Lang4f4207f2014-12-01 10:07:56 -0500144Renderbuffer *TextureAttachment::getRenderbuffer() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400145{
146 UNREACHABLE();
147 return NULL;
148}
149
Jamie Madille261b442014-06-25 12:42:21 -0400150////// RenderbufferAttachment Implementation //////
151
Jamie Madillaef95de2014-09-05 10:12:41 -0400152RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer)
153 : FramebufferAttachment(binding)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400154{
155 ASSERT(renderbuffer);
156 mRenderbuffer.set(renderbuffer);
157}
158
159RenderbufferAttachment::~RenderbufferAttachment()
160{
161 mRenderbuffer.set(NULL);
162}
163
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400164GLsizei RenderbufferAttachment::getWidth() const
165{
166 return mRenderbuffer->getWidth();
167}
168
169GLsizei RenderbufferAttachment::getHeight() const
170{
171 return mRenderbuffer->getHeight();
172}
173
174GLenum RenderbufferAttachment::getInternalFormat() const
175{
176 return mRenderbuffer->getInternalFormat();
177}
178
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400179GLsizei RenderbufferAttachment::getSamples() const
180{
Shannon Woodse2632d22014-10-17 13:08:51 -0400181 return mRenderbuffer->getSamples();
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400182}
183
Jamie Madill218b6ed2014-06-16 10:34:01 -0400184GLuint RenderbufferAttachment::id() const
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400185{
Jamie Madill218b6ed2014-06-16 10:34:01 -0400186 return mRenderbuffer->id();
187}
188
189GLenum RenderbufferAttachment::type() const
190{
191 return GL_RENDERBUFFER;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400192}
193
Jamie Madill9c074a32014-06-16 10:34:02 -0400194GLint RenderbufferAttachment::mipLevel() const
195{
196 return 0;
197}
198
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500199GLenum RenderbufferAttachment::cubeMapFace() const
200{
201 return GL_NONE;
202}
203
Jamie Madill9c074a32014-06-16 10:34:02 -0400204GLint RenderbufferAttachment::layer() const
205{
206 return 0;
207}
208
Geoff Lang4f4207f2014-12-01 10:07:56 -0500209Texture *RenderbufferAttachment::getTexture() const
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400210{
211 UNREACHABLE();
Jamie Madill5b5d1242014-09-09 15:15:36 -0400212 return NULL;
213}
214
Jamie Madillac7579c2014-09-17 16:59:33 -0400215const ImageIndex *RenderbufferAttachment::getTextureImageIndex() const
216{
217 UNREACHABLE();
218 return NULL;
219}
220
Geoff Lang4f4207f2014-12-01 10:07:56 -0500221Renderbuffer *RenderbufferAttachment::getRenderbuffer() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400222{
223 return mRenderbuffer.get();
Jamie Madillafc21c02014-06-04 15:29:47 -0400224}
225
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500226
227DefaultAttachment::DefaultAttachment(GLenum binding, rx::DefaultAttachmentImpl *impl)
228 : FramebufferAttachment(binding),
229 mImpl(impl)
230{
231 ASSERT(mImpl);
232}
233
234DefaultAttachment::~DefaultAttachment()
235{
236 SafeDelete(mImpl);
237}
238
239GLsizei DefaultAttachment::getWidth() const
240{
241 return mImpl->getWidth();
242}
243
244GLsizei DefaultAttachment::getHeight() const
245{
246 return mImpl->getHeight();
247}
248
249GLenum DefaultAttachment::getInternalFormat() const
250{
251 return mImpl->getInternalFormat();
252}
253
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500254GLsizei DefaultAttachment::getSamples() const
255{
256 return mImpl->getSamples();
257}
258
259GLuint DefaultAttachment::id() const
260{
261 return 0;
262}
263
264GLenum DefaultAttachment::type() const
265{
266 return GL_FRAMEBUFFER_DEFAULT;
267}
268
269GLint DefaultAttachment::mipLevel() const
270{
271 return 0;
272}
273
274GLenum DefaultAttachment::cubeMapFace() const
275{
276 return GL_NONE;
277}
278
279GLint DefaultAttachment::layer() const
280{
281 return 0;
282}
283
Geoff Lang4f4207f2014-12-01 10:07:56 -0500284Texture *DefaultAttachment::getTexture() const
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500285{
286 UNREACHABLE();
287 return NULL;
288}
289
290const ImageIndex *DefaultAttachment::getTextureImageIndex() const
291{
292 UNREACHABLE();
293 return NULL;
294}
295
Geoff Lang4f4207f2014-12-01 10:07:56 -0500296Renderbuffer *DefaultAttachment::getRenderbuffer() const
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500297{
298 UNREACHABLE();
299 return NULL;
300}
301
302rx::DefaultAttachmentImpl *DefaultAttachment::getImplementation() const
303{
304 return mImpl;
305}
306
Jamie Madillafc21c02014-06-04 15:29:47 -0400307}