blob: f47875f24766212a6abc14f606c7197b1287f83f [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 Lang5d601382014-07-22 15:14:06 -040037 return (GetInternalFormatInfo(getInternalFormat()).redBits > 0) ? GetInternalFormatInfo(getActualFormat()).redBits : 0;
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 Lang5d601382014-07-22 15:14:06 -040042 return (GetInternalFormatInfo(getInternalFormat()).greenBits > 0) ? GetInternalFormatInfo(getActualFormat()).greenBits : 0;
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 Lang5d601382014-07-22 15:14:06 -040047 return (GetInternalFormatInfo(getInternalFormat()).blueBits > 0) ? GetInternalFormatInfo(getActualFormat()).blueBits : 0;
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 Lang5d601382014-07-22 15:14:06 -040052 return (GetInternalFormatInfo(getInternalFormat()).alphaBits > 0) ? GetInternalFormatInfo(getActualFormat()).alphaBits : 0;
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 Lang5d601382014-07-22 15:14:06 -040057 return (GetInternalFormatInfo(getInternalFormat()).depthBits > 0) ? GetInternalFormatInfo(getActualFormat()).depthBits : 0;
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 Lang5d601382014-07-22 15:14:06 -040062 return (GetInternalFormatInfo(getInternalFormat()).stencilBits > 0) ? GetInternalFormatInfo(getActualFormat()).stencilBits : 0;
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 Lang5d601382014-07-22 15:14:06 -040067 return GetInternalFormatInfo(getActualFormat()).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 Lang5d601382014-07-22 15:14:06 -040072 return GetInternalFormatInfo(getActualFormat()).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{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400101 return mTexture->getWidth(mIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400102}
103
104GLsizei TextureAttachment::getHeight() const
105{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400106 return mTexture->getHeight(mIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400107}
108
109GLenum TextureAttachment::getInternalFormat() const
110{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400111 return mTexture->getInternalFormat(mIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400112}
113
114GLenum TextureAttachment::getActualFormat() const
115{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400116 return mTexture->getActualFormat(mIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400117}
118
119GLenum TextureAttachment::type() const
120{
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500121 return GL_TEXTURE;
Jamie Madillde3ed702014-09-03 15:07:17 -0400122}
123
124GLint TextureAttachment::mipLevel() const
125{
126 return mIndex.mipIndex;
127}
128
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500129GLenum TextureAttachment::cubeMapFace() const
130{
131 return IsCubemapTextureTarget(mIndex.type) ? mIndex.type : GL_NONE;
132}
133
Jamie Madillde3ed702014-09-03 15:07:17 -0400134GLint TextureAttachment::layer() const
135{
136 return mIndex.layerIndex;
137}
138
Jamie Madill5b5d1242014-09-09 15:15:36 -0400139Texture *TextureAttachment::getTexture()
140{
141 return mTexture.get();
142}
143
Jamie Madillac7579c2014-09-17 16:59:33 -0400144const ImageIndex *TextureAttachment::getTextureImageIndex() const
145{
146 return &mIndex;
147}
148
Jamie Madill5b5d1242014-09-09 15:15:36 -0400149Renderbuffer *TextureAttachment::getRenderbuffer()
150{
151 UNREACHABLE();
152 return NULL;
153}
154
Jamie Madille261b442014-06-25 12:42:21 -0400155////// RenderbufferAttachment Implementation //////
156
Jamie Madillaef95de2014-09-05 10:12:41 -0400157RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer)
158 : FramebufferAttachment(binding)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400159{
160 ASSERT(renderbuffer);
161 mRenderbuffer.set(renderbuffer);
162}
163
164RenderbufferAttachment::~RenderbufferAttachment()
165{
166 mRenderbuffer.set(NULL);
167}
168
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400169GLsizei RenderbufferAttachment::getWidth() const
170{
171 return mRenderbuffer->getWidth();
172}
173
174GLsizei RenderbufferAttachment::getHeight() const
175{
176 return mRenderbuffer->getHeight();
177}
178
179GLenum RenderbufferAttachment::getInternalFormat() const
180{
181 return mRenderbuffer->getInternalFormat();
182}
183
184GLenum RenderbufferAttachment::getActualFormat() const
185{
186 return mRenderbuffer->getActualFormat();
187}
188
189GLsizei RenderbufferAttachment::getSamples() const
190{
Shannon Woodse2632d22014-10-17 13:08:51 -0400191 return mRenderbuffer->getSamples();
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400192}
193
Jamie Madill218b6ed2014-06-16 10:34:01 -0400194GLuint RenderbufferAttachment::id() const
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400195{
Jamie Madill218b6ed2014-06-16 10:34:01 -0400196 return mRenderbuffer->id();
197}
198
199GLenum RenderbufferAttachment::type() const
200{
201 return GL_RENDERBUFFER;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400202}
203
Jamie Madill9c074a32014-06-16 10:34:02 -0400204GLint RenderbufferAttachment::mipLevel() const
205{
206 return 0;
207}
208
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500209GLenum RenderbufferAttachment::cubeMapFace() const
210{
211 return GL_NONE;
212}
213
Jamie Madill9c074a32014-06-16 10:34:02 -0400214GLint RenderbufferAttachment::layer() const
215{
216 return 0;
217}
218
Jamie Madill5b5d1242014-09-09 15:15:36 -0400219Texture *RenderbufferAttachment::getTexture()
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400220{
221 UNREACHABLE();
Jamie Madill5b5d1242014-09-09 15:15:36 -0400222 return NULL;
223}
224
Jamie Madillac7579c2014-09-17 16:59:33 -0400225const ImageIndex *RenderbufferAttachment::getTextureImageIndex() const
226{
227 UNREACHABLE();
228 return NULL;
229}
230
Jamie Madill5b5d1242014-09-09 15:15:36 -0400231Renderbuffer *RenderbufferAttachment::getRenderbuffer()
232{
233 return mRenderbuffer.get();
Jamie Madillafc21c02014-06-04 15:29:47 -0400234}
235
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500236
237DefaultAttachment::DefaultAttachment(GLenum binding, rx::DefaultAttachmentImpl *impl)
238 : FramebufferAttachment(binding),
239 mImpl(impl)
240{
241 ASSERT(mImpl);
242}
243
244DefaultAttachment::~DefaultAttachment()
245{
246 SafeDelete(mImpl);
247}
248
249GLsizei DefaultAttachment::getWidth() const
250{
251 return mImpl->getWidth();
252}
253
254GLsizei DefaultAttachment::getHeight() const
255{
256 return mImpl->getHeight();
257}
258
259GLenum DefaultAttachment::getInternalFormat() const
260{
261 return mImpl->getInternalFormat();
262}
263
264GLenum DefaultAttachment::getActualFormat() const
265{
266 return mImpl->getActualFormat();
267}
268
269GLsizei DefaultAttachment::getSamples() const
270{
271 return mImpl->getSamples();
272}
273
274GLuint DefaultAttachment::id() const
275{
276 return 0;
277}
278
279GLenum DefaultAttachment::type() const
280{
281 return GL_FRAMEBUFFER_DEFAULT;
282}
283
284GLint DefaultAttachment::mipLevel() const
285{
286 return 0;
287}
288
289GLenum DefaultAttachment::cubeMapFace() const
290{
291 return GL_NONE;
292}
293
294GLint DefaultAttachment::layer() const
295{
296 return 0;
297}
298
299Texture *DefaultAttachment::getTexture()
300{
301 UNREACHABLE();
302 return NULL;
303}
304
305const ImageIndex *DefaultAttachment::getTextureImageIndex() const
306{
307 UNREACHABLE();
308 return NULL;
309}
310
311Renderbuffer *DefaultAttachment::getRenderbuffer()
312{
313 UNREACHABLE();
314 return NULL;
315}
316
317rx::DefaultAttachmentImpl *DefaultAttachment::getImplementation() const
318{
319 return mImpl;
320}
321
Jamie Madillafc21c02014-06-04 15:29:47 -0400322}