blob: ebc01fbb777a9a3cb3f908f3954a204e4ee121bd [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"
Geoff Lang0b7eef72014-06-12 14:10:47 -040015
16#include "common/utilities.h"
Jamie Madillafc21c02014-06-04 15:29:47 -040017
18namespace gl
19{
20
Jamie Madillafc21c02014-06-04 15:29:47 -040021////// FramebufferAttachment Implementation //////
22
Jamie Madillaef95de2014-09-05 10:12:41 -040023FramebufferAttachment::FramebufferAttachment(GLenum binding)
24 : mBinding(binding)
Jamie Madillafc21c02014-06-04 15:29:47 -040025{
Jamie Madillafc21c02014-06-04 15:29:47 -040026}
27
28FramebufferAttachment::~FramebufferAttachment()
29{
Jamie Madillafc21c02014-06-04 15:29:47 -040030}
31
Geoff Lange4a492b2014-06-19 14:14:41 -040032GLuint FramebufferAttachment::getRedSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040033{
Geoff Langd8a22582014-12-17 15:28:23 -050034 return GetInternalFormatInfo(getInternalFormat()).redBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040035}
36
Geoff Lange4a492b2014-06-19 14:14:41 -040037GLuint FramebufferAttachment::getGreenSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040038{
Geoff Langd8a22582014-12-17 15:28:23 -050039 return GetInternalFormatInfo(getInternalFormat()).greenBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040040}
41
Geoff Lange4a492b2014-06-19 14:14:41 -040042GLuint FramebufferAttachment::getBlueSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040043{
Geoff Langd8a22582014-12-17 15:28:23 -050044 return GetInternalFormatInfo(getInternalFormat()).blueBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040045}
46
Geoff Lange4a492b2014-06-19 14:14:41 -040047GLuint FramebufferAttachment::getAlphaSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040048{
Geoff Langd8a22582014-12-17 15:28:23 -050049 return GetInternalFormatInfo(getInternalFormat()).alphaBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040050}
51
Geoff Lange4a492b2014-06-19 14:14:41 -040052GLuint FramebufferAttachment::getDepthSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040053{
Geoff Langd8a22582014-12-17 15:28:23 -050054 return GetInternalFormatInfo(getInternalFormat()).depthBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040055}
56
Geoff Lange4a492b2014-06-19 14:14:41 -040057GLuint FramebufferAttachment::getStencilSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040058{
Geoff Langd8a22582014-12-17 15:28:23 -050059 return GetInternalFormatInfo(getInternalFormat()).stencilBits;
Jamie Madillafc21c02014-06-04 15:29:47 -040060}
61
Geoff Lange4a492b2014-06-19 14:14:41 -040062GLenum FramebufferAttachment::getComponentType() const
Jamie Madillafc21c02014-06-04 15:29:47 -040063{
Geoff Langd8a22582014-12-17 15:28:23 -050064 return GetInternalFormatInfo(getInternalFormat()).componentType;
Jamie Madillafc21c02014-06-04 15:29:47 -040065}
66
Geoff Lange4a492b2014-06-19 14:14:41 -040067GLenum FramebufferAttachment::getColorEncoding() const
Jamie Madillafc21c02014-06-04 15:29:47 -040068{
Geoff Langd8a22582014-12-17 15:28:23 -050069 return GetInternalFormatInfo(getInternalFormat()).colorEncoding;
Jamie Madillafc21c02014-06-04 15:29:47 -040070}
71
Jamie Madill3592a332014-09-03 15:07:15 -040072///// TextureAttachment Implementation ////////
73
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040074TextureAttachment::TextureAttachment(GLenum binding, Texture *texture, const ImageIndex &index)
Jamie Madillde3ed702014-09-03 15:07:17 -040075 : FramebufferAttachment(binding),
76 mIndex(index)
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040077{
78 mTexture.set(texture);
79}
80
81TextureAttachment::~TextureAttachment()
82{
83 mTexture.set(NULL);
84}
Jamie Madillaef95de2014-09-05 10:12:41 -040085
Jamie Madill3592a332014-09-03 15:07:15 -040086GLsizei TextureAttachment::getSamples() const
87{
88 return 0;
89}
90
91GLuint TextureAttachment::id() const
92{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040093 return mTexture->id();
Jamie Madill3592a332014-09-03 15:07:15 -040094}
95
Jamie Madillde3ed702014-09-03 15:07:17 -040096GLsizei TextureAttachment::getWidth() const
97{
Geoff Langa9be0dc2014-12-17 12:34:40 -050098 return mTexture->getWidth(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -040099}
100
101GLsizei TextureAttachment::getHeight() const
102{
Geoff Langa9be0dc2014-12-17 12:34:40 -0500103 return mTexture->getHeight(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400104}
105
106GLenum TextureAttachment::getInternalFormat() const
107{
Geoff Langa9be0dc2014-12-17 12:34:40 -0500108 return mTexture->getInternalFormat(mIndex.type, mIndex.mipIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400109}
110
Jamie Madillde3ed702014-09-03 15:07:17 -0400111GLenum TextureAttachment::type() const
112{
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500113 return GL_TEXTURE;
Jamie Madillde3ed702014-09-03 15:07:17 -0400114}
115
116GLint TextureAttachment::mipLevel() const
117{
118 return mIndex.mipIndex;
119}
120
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500121GLenum TextureAttachment::cubeMapFace() const
122{
Geoff Lang691e58c2014-12-19 17:03:25 -0500123 return IsCubeMapTextureTarget(mIndex.type) ? mIndex.type : GL_NONE;
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500124}
125
Jamie Madillde3ed702014-09-03 15:07:17 -0400126GLint TextureAttachment::layer() const
127{
128 return mIndex.layerIndex;
129}
130
Geoff Lang4f4207f2014-12-01 10:07:56 -0500131Texture *TextureAttachment::getTexture() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400132{
133 return mTexture.get();
134}
135
Jamie Madillac7579c2014-09-17 16:59:33 -0400136const ImageIndex *TextureAttachment::getTextureImageIndex() const
137{
138 return &mIndex;
139}
140
Geoff Lang4f4207f2014-12-01 10:07:56 -0500141Renderbuffer *TextureAttachment::getRenderbuffer() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400142{
143 UNREACHABLE();
144 return NULL;
145}
146
Jamie Madille261b442014-06-25 12:42:21 -0400147////// RenderbufferAttachment Implementation //////
148
Jamie Madillaef95de2014-09-05 10:12:41 -0400149RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer)
150 : FramebufferAttachment(binding)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400151{
152 ASSERT(renderbuffer);
153 mRenderbuffer.set(renderbuffer);
154}
155
156RenderbufferAttachment::~RenderbufferAttachment()
157{
158 mRenderbuffer.set(NULL);
159}
160
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400161GLsizei RenderbufferAttachment::getWidth() const
162{
163 return mRenderbuffer->getWidth();
164}
165
166GLsizei RenderbufferAttachment::getHeight() const
167{
168 return mRenderbuffer->getHeight();
169}
170
171GLenum RenderbufferAttachment::getInternalFormat() const
172{
173 return mRenderbuffer->getInternalFormat();
174}
175
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400176GLsizei RenderbufferAttachment::getSamples() const
177{
Shannon Woodse2632d22014-10-17 13:08:51 -0400178 return mRenderbuffer->getSamples();
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400179}
180
Jamie Madill218b6ed2014-06-16 10:34:01 -0400181GLuint RenderbufferAttachment::id() const
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400182{
Jamie Madill218b6ed2014-06-16 10:34:01 -0400183 return mRenderbuffer->id();
184}
185
186GLenum RenderbufferAttachment::type() const
187{
188 return GL_RENDERBUFFER;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400189}
190
Jamie Madill9c074a32014-06-16 10:34:02 -0400191GLint RenderbufferAttachment::mipLevel() const
192{
193 return 0;
194}
195
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500196GLenum RenderbufferAttachment::cubeMapFace() const
197{
198 return GL_NONE;
199}
200
Jamie Madill9c074a32014-06-16 10:34:02 -0400201GLint RenderbufferAttachment::layer() const
202{
203 return 0;
204}
205
Geoff Lang4f4207f2014-12-01 10:07:56 -0500206Texture *RenderbufferAttachment::getTexture() const
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400207{
208 UNREACHABLE();
Jamie Madill5b5d1242014-09-09 15:15:36 -0400209 return NULL;
210}
211
Jamie Madillac7579c2014-09-17 16:59:33 -0400212const ImageIndex *RenderbufferAttachment::getTextureImageIndex() const
213{
214 UNREACHABLE();
215 return NULL;
216}
217
Geoff Lang4f4207f2014-12-01 10:07:56 -0500218Renderbuffer *RenderbufferAttachment::getRenderbuffer() const
Jamie Madill5b5d1242014-09-09 15:15:36 -0400219{
220 return mRenderbuffer.get();
Jamie Madillafc21c02014-06-04 15:29:47 -0400221}
222
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500223
224DefaultAttachment::DefaultAttachment(GLenum binding, rx::DefaultAttachmentImpl *impl)
225 : FramebufferAttachment(binding),
226 mImpl(impl)
227{
228 ASSERT(mImpl);
229}
230
231DefaultAttachment::~DefaultAttachment()
232{
233 SafeDelete(mImpl);
234}
235
236GLsizei DefaultAttachment::getWidth() const
237{
238 return mImpl->getWidth();
239}
240
241GLsizei DefaultAttachment::getHeight() const
242{
243 return mImpl->getHeight();
244}
245
246GLenum DefaultAttachment::getInternalFormat() const
247{
248 return mImpl->getInternalFormat();
249}
250
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500251GLsizei DefaultAttachment::getSamples() const
252{
253 return mImpl->getSamples();
254}
255
256GLuint DefaultAttachment::id() const
257{
258 return 0;
259}
260
261GLenum DefaultAttachment::type() const
262{
263 return GL_FRAMEBUFFER_DEFAULT;
264}
265
266GLint DefaultAttachment::mipLevel() const
267{
268 return 0;
269}
270
271GLenum DefaultAttachment::cubeMapFace() const
272{
273 return GL_NONE;
274}
275
276GLint DefaultAttachment::layer() const
277{
278 return 0;
279}
280
Geoff Lang4f4207f2014-12-01 10:07:56 -0500281Texture *DefaultAttachment::getTexture() const
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500282{
283 UNREACHABLE();
284 return NULL;
285}
286
287const ImageIndex *DefaultAttachment::getTextureImageIndex() const
288{
289 UNREACHABLE();
290 return NULL;
291}
292
Geoff Lang4f4207f2014-12-01 10:07:56 -0500293Renderbuffer *DefaultAttachment::getRenderbuffer() const
Geoff Lang6a1e6b92014-11-06 10:42:45 -0500294{
295 UNREACHABLE();
296 return NULL;
297}
298
299rx::DefaultAttachmentImpl *DefaultAttachment::getImplementation() const
300{
301 return mImpl;
302}
303
Jamie Madillafc21c02014-06-04 15:29:47 -0400304}