blob: 971f188cedc1b43ed8bdae3a42b5a920aa5bf2f1 [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
10#include "libGLESv2/FramebufferAttachment.h"
Jamie Madillafc21c02014-06-04 15:29:47 -040011#include "libGLESv2/Texture.h"
Jamie Madillafc21c02014-06-04 15:29:47 -040012#include "libGLESv2/formatutils.h"
13#include "libGLESv2/Renderbuffer.h"
Geoff Lang0b7eef72014-06-12 14:10:47 -040014#include "libGLESv2/renderer/RenderTarget.h"
15#include "libGLESv2/renderer/Renderer.h"
16#include "libGLESv2/renderer/d3d/TextureStorage.h"
17
18#include "common/utilities.h"
Jamie Madillafc21c02014-06-04 15:29:47 -040019
20namespace gl
21{
22
Jamie Madillafc21c02014-06-04 15:29:47 -040023////// FramebufferAttachment Implementation //////
24
Jamie Madillaef95de2014-09-05 10:12:41 -040025FramebufferAttachment::FramebufferAttachment(GLenum binding)
26 : mBinding(binding)
Jamie Madillafc21c02014-06-04 15:29:47 -040027{
Jamie Madillafc21c02014-06-04 15:29:47 -040028}
29
30FramebufferAttachment::~FramebufferAttachment()
31{
Jamie Madillafc21c02014-06-04 15:29:47 -040032}
33
Geoff Lange4a492b2014-06-19 14:14:41 -040034GLuint FramebufferAttachment::getRedSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040035{
Geoff Lang5d601382014-07-22 15:14:06 -040036 return (GetInternalFormatInfo(getInternalFormat()).redBits > 0) ? GetInternalFormatInfo(getActualFormat()).redBits : 0;
Jamie Madillafc21c02014-06-04 15:29:47 -040037}
38
Geoff Lange4a492b2014-06-19 14:14:41 -040039GLuint FramebufferAttachment::getGreenSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040040{
Geoff Lang5d601382014-07-22 15:14:06 -040041 return (GetInternalFormatInfo(getInternalFormat()).greenBits > 0) ? GetInternalFormatInfo(getActualFormat()).greenBits : 0;
Jamie Madillafc21c02014-06-04 15:29:47 -040042}
43
Geoff Lange4a492b2014-06-19 14:14:41 -040044GLuint FramebufferAttachment::getBlueSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040045{
Geoff Lang5d601382014-07-22 15:14:06 -040046 return (GetInternalFormatInfo(getInternalFormat()).blueBits > 0) ? GetInternalFormatInfo(getActualFormat()).blueBits : 0;
Jamie Madillafc21c02014-06-04 15:29:47 -040047}
48
Geoff Lange4a492b2014-06-19 14:14:41 -040049GLuint FramebufferAttachment::getAlphaSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040050{
Geoff Lang5d601382014-07-22 15:14:06 -040051 return (GetInternalFormatInfo(getInternalFormat()).alphaBits > 0) ? GetInternalFormatInfo(getActualFormat()).alphaBits : 0;
Jamie Madillafc21c02014-06-04 15:29:47 -040052}
53
Geoff Lange4a492b2014-06-19 14:14:41 -040054GLuint FramebufferAttachment::getDepthSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040055{
Geoff Lang5d601382014-07-22 15:14:06 -040056 return (GetInternalFormatInfo(getInternalFormat()).depthBits > 0) ? GetInternalFormatInfo(getActualFormat()).depthBits : 0;
Jamie Madillafc21c02014-06-04 15:29:47 -040057}
58
Geoff Lange4a492b2014-06-19 14:14:41 -040059GLuint FramebufferAttachment::getStencilSize() const
Jamie Madillafc21c02014-06-04 15:29:47 -040060{
Geoff Lang5d601382014-07-22 15:14:06 -040061 return (GetInternalFormatInfo(getInternalFormat()).stencilBits > 0) ? GetInternalFormatInfo(getActualFormat()).stencilBits : 0;
Jamie Madillafc21c02014-06-04 15:29:47 -040062}
63
Geoff Lange4a492b2014-06-19 14:14:41 -040064GLenum FramebufferAttachment::getComponentType() const
Jamie Madillafc21c02014-06-04 15:29:47 -040065{
Geoff Lang5d601382014-07-22 15:14:06 -040066 return GetInternalFormatInfo(getActualFormat()).componentType;
Jamie Madillafc21c02014-06-04 15:29:47 -040067}
68
Geoff Lange4a492b2014-06-19 14:14:41 -040069GLenum FramebufferAttachment::getColorEncoding() const
Jamie Madillafc21c02014-06-04 15:29:47 -040070{
Geoff Lang5d601382014-07-22 15:14:06 -040071 return GetInternalFormatInfo(getActualFormat()).colorEncoding;
Jamie Madillafc21c02014-06-04 15:29:47 -040072}
73
Jamie Madill218b6ed2014-06-16 10:34:01 -040074bool FramebufferAttachment::isTexture() const
75{
76 return (type() != GL_RENDERBUFFER);
77}
78
Jamie Madill3592a332014-09-03 15:07:15 -040079///// TextureAttachment Implementation ////////
80
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040081TextureAttachment::TextureAttachment(GLenum binding, Texture *texture, const ImageIndex &index)
Jamie Madillde3ed702014-09-03 15:07:17 -040082 : FramebufferAttachment(binding),
83 mIndex(index)
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040084{
85 mTexture.set(texture);
86}
87
88TextureAttachment::~TextureAttachment()
89{
90 mTexture.set(NULL);
91}
Jamie Madillaef95de2014-09-05 10:12:41 -040092
Jamie Madill3592a332014-09-03 15:07:15 -040093rx::TextureStorage *TextureAttachment::getTextureStorage()
94{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -040095 return mTexture->getNativeTexture()->getStorageInstance();
Jamie Madill3592a332014-09-03 15:07:15 -040096}
97
98GLsizei TextureAttachment::getSamples() const
99{
100 return 0;
101}
102
103GLuint TextureAttachment::id() const
104{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400105 return mTexture->id();
Jamie Madill3592a332014-09-03 15:07:15 -0400106}
107
108unsigned int TextureAttachment::getTextureSerial() const
109{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400110 return mTexture->getTextureSerial();
Jamie Madill3592a332014-09-03 15:07:15 -0400111}
112
Jamie Madillde3ed702014-09-03 15:07:17 -0400113GLsizei TextureAttachment::getWidth() const
114{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400115 return mTexture->getWidth(mIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400116}
117
118GLsizei TextureAttachment::getHeight() const
119{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400120 return mTexture->getHeight(mIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400121}
122
123GLenum TextureAttachment::getInternalFormat() const
124{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400125 return mTexture->getInternalFormat(mIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400126}
127
128GLenum TextureAttachment::getActualFormat() const
129{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400130 return mTexture->getActualFormat(mIndex);
Jamie Madillde3ed702014-09-03 15:07:17 -0400131}
132
133GLenum TextureAttachment::type() const
134{
135 return mIndex.type;
136}
137
138GLint TextureAttachment::mipLevel() const
139{
140 return mIndex.mipIndex;
141}
142
143GLint TextureAttachment::layer() const
144{
145 return mIndex.layerIndex;
146}
147
Jamie Madill1d743d32014-09-03 15:07:18 -0400148rx::RenderTarget *TextureAttachment::getRenderTarget()
149{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400150 return mTexture->getRenderTarget(mIndex);
Jamie Madill1d743d32014-09-03 15:07:18 -0400151}
152
153unsigned int TextureAttachment::getSerial() const
154{
Jamie Madilleeb7b0e2014-09-03 15:07:20 -0400155 return mTexture->getRenderTargetSerial(mIndex);
Jamie Madille261b442014-06-25 12:42:21 -0400156}
157
158////// RenderbufferAttachment Implementation //////
159
Jamie Madillaef95de2014-09-05 10:12:41 -0400160RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer)
161 : FramebufferAttachment(binding)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400162{
163 ASSERT(renderbuffer);
164 mRenderbuffer.set(renderbuffer);
165}
166
167RenderbufferAttachment::~RenderbufferAttachment()
168{
169 mRenderbuffer.set(NULL);
170}
171
172rx::RenderTarget *RenderbufferAttachment::getRenderTarget()
173{
174 return mRenderbuffer->getStorage()->getRenderTarget();
175}
176
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400177rx::TextureStorage *RenderbufferAttachment::getTextureStorage()
178{
179 UNREACHABLE();
180 return NULL;
181}
182
183GLsizei RenderbufferAttachment::getWidth() const
184{
185 return mRenderbuffer->getWidth();
186}
187
188GLsizei RenderbufferAttachment::getHeight() const
189{
190 return mRenderbuffer->getHeight();
191}
192
193GLenum RenderbufferAttachment::getInternalFormat() const
194{
195 return mRenderbuffer->getInternalFormat();
196}
197
198GLenum RenderbufferAttachment::getActualFormat() const
199{
200 return mRenderbuffer->getActualFormat();
201}
202
203GLsizei RenderbufferAttachment::getSamples() const
204{
205 return mRenderbuffer->getStorage()->getSamples();
206}
207
208unsigned int RenderbufferAttachment::getSerial() const
209{
210 return mRenderbuffer->getStorage()->getSerial();
211}
212
Jamie Madill218b6ed2014-06-16 10:34:01 -0400213GLuint RenderbufferAttachment::id() const
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400214{
Jamie Madill218b6ed2014-06-16 10:34:01 -0400215 return mRenderbuffer->id();
216}
217
218GLenum RenderbufferAttachment::type() const
219{
220 return GL_RENDERBUFFER;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400221}
222
Jamie Madill9c074a32014-06-16 10:34:02 -0400223GLint RenderbufferAttachment::mipLevel() const
224{
225 return 0;
226}
227
228GLint RenderbufferAttachment::layer() const
229{
230 return 0;
231}
232
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400233unsigned int RenderbufferAttachment::getTextureSerial() const
234{
235 UNREACHABLE();
236 return 0;
Jamie Madillafc21c02014-06-04 15:29:47 -0400237}
238
239}