blob: b0c0ee51bd940bd73f2e63df424387380e7f82b3 [file] [log] [blame]
shannon.woods@transgaming.combdf2d802013-02-28 23:16:20 +00001#include "precompiled.h"
daniel@transgaming.com95a758f2012-07-12 15:17:06 +00002//
Geoff Langcec35902014-04-16 10:52:36 -04003// Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.com95a758f2012-07-12 15:17:06 +00004// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6//
7
8// Texture.cpp: Implements the gl::Texture class and its derived classes
9// Texture2D and TextureCubeMap. Implements GL texture objects and related
10// functionality. [OpenGL ES 2.0.24] section 3.7 page 63.
11
12#include "libGLESv2/Texture.h"
13
daniel@transgaming.com95a758f2012-07-12 15:17:06 +000014#include "libGLESv2/main.h"
shannonwoods@chromium.orga2ecfcc2013-05-30 00:11:59 +000015#include "common/mathutil.h"
16#include "common/utilities.h"
shannonwoods@chromium.org4ad58e02013-05-30 00:08:11 +000017#include "libGLESv2/formatutils.h"
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000018#include "libGLESv2/Renderbuffer.h"
19#include "libGLESv2/renderer/Image.h"
Brandon Jones6518fe22014-07-08 15:16:52 -070020#include "libGLESv2/renderer/d3d/TextureStorage.h"
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000021#include "libEGL/Surface.h"
Jamie Madill0e0510f2013-10-10 15:46:23 -040022#include "libGLESv2/renderer/RenderTarget.h"
Brandon Jonesf47bebc2014-07-09 14:28:42 -070023#include "libGLESv2/renderer/TextureImpl.h"
daniel@transgaming.com95a758f2012-07-12 15:17:06 +000024
25namespace gl
26{
daniel@transgaming.com95a758f2012-07-12 15:17:06 +000027
Brandon Jonesf47bebc2014-07-09 14:28:42 -070028Texture::Texture(GLuint id, GLenum target)
29 : RefCountObject(id),
30 mUsage(GL_NONE),
31 mImmutable(false),
32 mTarget(target)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +000033{
daniel@transgaming.com95a758f2012-07-12 15:17:06 +000034}
35
36Texture::~Texture()
37{
38}
39
Geoff Lang4907f2c2013-07-25 12:53:57 -040040GLenum Texture::getTarget() const
41{
42 return mTarget;
43}
44
Geoff Lang63b5f1f2013-09-23 14:52:14 -040045void Texture::setUsage(GLenum usage)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +000046{
Geoff Lang63b5f1f2013-09-23 14:52:14 -040047 mUsage = usage;
daniel@transgaming.com95a758f2012-07-12 15:17:06 +000048}
49
Brandon Jonesa328d562014-07-01 13:52:40 -070050void Texture::getSamplerStateWithNativeOffset(SamplerState *sampler)
daniel@transgaming.comebf139f2012-10-31 18:07:32 +000051{
52 *sampler = mSamplerState;
Nicolas Capens8de68282014-04-04 11:10:27 -040053
54 // Offset the effective base level by the texture storage's top level
55 rx::TextureStorageInterface *texture = getNativeTexture();
56 int topLevel = texture ? texture->getTopLevel() : 0;
57 sampler->baseLevel = topLevel + mSamplerState.baseLevel;
daniel@transgaming.com07ab8412012-07-12 15:17:09 +000058}
59
daniel@transgaming.com95a758f2012-07-12 15:17:06 +000060GLenum Texture::getUsage() const
61{
62 return mUsage;
63}
64
Jamie Madilld3d2a342013-10-07 10:46:35 -040065GLint Texture::getBaseLevelWidth() const
66{
67 const rx::Image *baseImage = getBaseLevelImage();
68 return (baseImage ? baseImage->getWidth() : 0);
69}
70
71GLint Texture::getBaseLevelHeight() const
72{
73 const rx::Image *baseImage = getBaseLevelImage();
74 return (baseImage ? baseImage->getHeight() : 0);
75}
76
77GLint Texture::getBaseLevelDepth() const
78{
79 const rx::Image *baseImage = getBaseLevelImage();
80 return (baseImage ? baseImage->getDepth() : 0);
81}
82
Jamie Madillb8f8b892014-01-07 10:12:50 -050083// Note: "base level image" is loosely defined to be any image from the base level,
84// where in the base of 2D array textures and cube maps there are several. Don't use
85// the base level image for anything except querying texture format and size.
Jamie Madilld3d2a342013-10-07 10:46:35 -040086GLenum Texture::getBaseLevelInternalFormat() const
87{
88 const rx::Image *baseImage = getBaseLevelImage();
89 return (baseImage ? baseImage->getInternalFormat() : GL_NONE);
90}
91
Brandon Jonesf47bebc2014-07-09 14:28:42 -070092unsigned int Texture::getTextureSerial()
93{
94 rx::TextureStorageInterface *texture = getNativeTexture();
95 return texture ? texture->getTextureSerial() : 0;
96}
97
98bool Texture::isImmutable() const
99{
100 return mImmutable;
101}
102
103int Texture::immutableLevelCount()
104{
105 return (mImmutable ? getNativeTexture()->getStorageInstance()->getLevelCount() : 0);
106}
107
108int Texture::mipLevels() const
109{
110 return log2(std::max(std::max(getBaseLevelWidth(), getBaseLevelHeight()), getBaseLevelDepth())) + 1;
111}
112
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700113Texture2D::Texture2D(rx::Texture2DImpl *impl, GLuint id)
114 : Texture(id, GL_TEXTURE_2D),
115 mTexture(impl)
Jamie Madill22f843a2013-10-24 17:49:36 -0400116{
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000117 mSurface = NULL;
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000118}
119
120Texture2D::~Texture2D()
121{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700122 SafeDelete(mTexture);
123
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000124 if (mSurface)
125 {
126 mSurface->setBoundTexture(NULL);
127 mSurface = NULL;
128 }
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700129}
daniel@transgaming.comd9ec9022012-12-20 20:52:16 +0000130
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700131rx::TextureStorageInterface *Texture2D::getNativeTexture()
132{
133 return mTexture->getNativeTexture();
134}
135
136void Texture2D::setUsage(GLenum usage)
137{
138 mUsage = usage;
139 mTexture->setUsage(usage);
140}
141
142bool Texture2D::hasDirtyImages() const
143{
144 return mTexture->hasDirtyImages();
145}
146
147void Texture2D::resetDirty()
148{
149 mTexture->resetDirty();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000150}
151
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000152GLsizei Texture2D::getWidth(GLint level) const
153{
154 if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700155 return mTexture->getImage(level)->getWidth();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000156 else
157 return 0;
158}
159
160GLsizei Texture2D::getHeight(GLint level) const
161{
162 if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700163 return mTexture->getImage(level)->getHeight();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000164 else
165 return 0;
166}
167
168GLenum Texture2D::getInternalFormat(GLint level) const
169{
170 if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700171 return mTexture->getImage(level)->getInternalFormat();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000172 else
173 return GL_NONE;
174}
175
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000176GLenum Texture2D::getActualFormat(GLint level) const
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000177{
178 if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700179 return mTexture->getImage(level)->getActualFormat();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000180 else
Geoff Langcbf727a2014-02-10 12:50:45 -0500181 return GL_NONE;
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000182}
183
Geoff Lang005df412013-10-16 14:12:50 -0400184void Texture2D::redefineImage(GLint level, GLenum internalformat, GLsizei width, GLsizei height)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000185{
186 releaseTexImage();
shannon.woods@transgaming.com8a406682013-02-28 23:15:26 +0000187
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700188 mTexture->redefineImage(level, internalformat, width, height);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000189}
190
Geoff Lang005df412013-10-16 14:12:50 -0400191void Texture2D::setImage(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000192{
Geoff Lange4a492b2014-06-19 14:14:41 -0400193 GLenum sizedInternalFormat = IsSizedInternalFormat(internalFormat) ? internalFormat
194 : GetSizedInternalFormat(format, type);
shannonwoods@chromium.org4ad58e02013-05-30 00:08:11 +0000195 redefineImage(level, sizedInternalFormat, width, height);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000196
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700197 mTexture->setImage(level, width, height, internalFormat, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000198}
199
200void Texture2D::bindTexImage(egl::Surface *surface)
201{
202 releaseTexImage();
203
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700204 mTexture->bindTexImage(surface);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000205
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000206 mSurface = surface;
207 mSurface->setBoundTexture(this);
208}
209
210void Texture2D::releaseTexImage()
211{
212 if (mSurface)
213 {
214 mSurface->setBoundTexture(NULL);
215 mSurface = NULL;
216
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700217 mTexture->releaseTexImage();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000218 }
219}
220
221void Texture2D::setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels)
222{
daniel@transgaming.com6452adf2012-10-17 18:22:35 +0000223 // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
shannon.woods@transgaming.come2e97982013-02-28 23:18:50 +0000224 redefineImage(level, format, width, height);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000225
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700226 mTexture->setCompressedImage(level, format, width, height, imageSize, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000227}
228
Jamie Madill88f18f42013-09-18 14:36:19 -0400229void Texture2D::subImage(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000230{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700231 mTexture->subImage(level, xoffset, yoffset, width, height, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000232}
233
234void Texture2D::subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels)
235{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700236 mTexture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000237}
238
239void Texture2D::copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
240{
Geoff Lange4a492b2014-06-19 14:14:41 -0400241 GLenum sizedInternalFormat = IsSizedInternalFormat(format) ? format
242 : GetSizedInternalFormat(format, GL_UNSIGNED_BYTE);
shannonwoods@chromium.org557aab02013-05-30 00:08:27 +0000243 redefineImage(level, sizedInternalFormat, width, height);
shannon.woods@transgaming.com8a406682013-02-28 23:15:26 +0000244
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700245 mTexture->copyImage(level, format, x, y, width, height, source);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000246}
247
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000248void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000249{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700250 mTexture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000251}
252
253void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
254{
Jamie Madill73b5d062013-10-24 17:49:38 -0400255 mImmutable = true;
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000256
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700257 mTexture->storage(levels, internalformat, width, height);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000258}
259
260// Tests for 2D texture sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 85.
Jamie Madillf8989902013-07-19 16:36:58 -0400261bool Texture2D::isSamplerComplete(const SamplerState &samplerState) const
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000262{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700263 return mTexture->isSamplerComplete(samplerState);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000264}
265
266bool Texture2D::isCompressed(GLint level) const
267{
Geoff Lange4a492b2014-06-19 14:14:41 -0400268 return IsFormatCompressed(getInternalFormat(level));
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000269}
270
271bool Texture2D::isDepth(GLint level) const
272{
Geoff Lange4a492b2014-06-19 14:14:41 -0400273 return GetDepthBits(getInternalFormat(level)) > 0;
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000274}
275
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000276void Texture2D::generateMipmaps()
277{
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000278 // Purge array levels 1 through q and reset them to represent the generated mipmap levels.
Geoff Lang98705b72014-03-31 16:00:03 -0400279 int levelCount = mipLevels();
280 for (int level = 1; level < levelCount; level++)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000281 {
Jamie Madill22f843a2013-10-24 17:49:36 -0400282 redefineImage(level, getBaseLevelInternalFormat(),
283 std::max(getBaseLevelWidth() >> level, 1),
284 std::max(getBaseLevelHeight() >> level, 1));
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000285 }
286
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700287 mTexture->generateMipmaps();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000288}
289
Jamie Madilld3d2a342013-10-07 10:46:35 -0400290const rx::Image *Texture2D::getBaseLevelImage() const
291{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700292 return mTexture->getImage(0);
Jamie Madill2ebab852013-10-24 17:49:42 -0400293}
294
Geoff Lang8040f572013-07-25 16:49:54 -0400295unsigned int Texture2D::getRenderTargetSerial(GLint level)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000296{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700297 return mTexture->getRenderTargetSerial(level);
Geoff Lang8040f572013-07-25 16:49:54 -0400298}
299
300rx::RenderTarget *Texture2D::getRenderTarget(GLint level)
301{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700302 return mTexture->getRenderTarget(level);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000303}
304
Geoff Lang8040f572013-07-25 16:49:54 -0400305rx::RenderTarget *Texture2D::getDepthSencil(GLint level)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000306{
Brandon Jonesf47bebc2014-07-09 14:28:42 -0700307 return mTexture->getDepthSencil(level);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000308}
309
Brandon Jones0511e802014-07-14 16:27:26 -0700310TextureCubeMap::TextureCubeMap(rx::TextureCubeImpl *impl, GLuint id)
311 : Texture(id, GL_TEXTURE_CUBE_MAP),
312 mTexture(impl)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000313{
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000314}
315
316TextureCubeMap::~TextureCubeMap()
317{
Brandon Jones0511e802014-07-14 16:27:26 -0700318 SafeDelete(mTexture);
319}
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000320
Brandon Jones0511e802014-07-14 16:27:26 -0700321rx::TextureStorageInterface *TextureCubeMap::getNativeTexture()
322{
323 return mTexture->getNativeTexture();
324}
325
326void TextureCubeMap::setUsage(GLenum usage)
327{
328 mUsage = usage;
329 mTexture->setUsage(usage);
330}
331
332bool TextureCubeMap::hasDirtyImages() const
333{
334 return mTexture->hasDirtyImages();
335}
336
337void TextureCubeMap::resetDirty()
338{
339 mTexture->resetDirty();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000340}
341
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000342GLsizei TextureCubeMap::getWidth(GLenum target, GLint level) const
343{
344 if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Brandon Jones0511e802014-07-14 16:27:26 -0700345 return mTexture->getImage(target, level)->getWidth();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000346 else
347 return 0;
348}
349
350GLsizei TextureCubeMap::getHeight(GLenum target, GLint level) const
351{
352 if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Brandon Jones0511e802014-07-14 16:27:26 -0700353 return mTexture->getImage(target, level)->getHeight();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000354 else
355 return 0;
356}
357
358GLenum TextureCubeMap::getInternalFormat(GLenum target, GLint level) const
359{
360 if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Brandon Jones0511e802014-07-14 16:27:26 -0700361 return mTexture->getImage(target, level)->getInternalFormat();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000362 else
363 return GL_NONE;
364}
365
daniel@transgaming.com20d36662012-10-31 19:51:43 +0000366GLenum TextureCubeMap::getActualFormat(GLenum target, GLint level) const
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000367{
368 if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Brandon Jones0511e802014-07-14 16:27:26 -0700369 return mTexture->getImage(target, level)->getActualFormat();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000370 else
Geoff Langcbf727a2014-02-10 12:50:45 -0500371 return GL_NONE;
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000372}
373
Geoff Lang005df412013-10-16 14:12:50 -0400374void TextureCubeMap::setImagePosX(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000375{
Brandon Jones0511e802014-07-14 16:27:26 -0700376 mTexture->setImage(0, level, width, height, internalFormat, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000377}
378
Geoff Lang005df412013-10-16 14:12:50 -0400379void TextureCubeMap::setImageNegX(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000380{
Brandon Jones0511e802014-07-14 16:27:26 -0700381 mTexture->setImage(1, level, width, height, internalFormat, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000382}
383
Geoff Lang005df412013-10-16 14:12:50 -0400384void TextureCubeMap::setImagePosY(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000385{
Brandon Jones0511e802014-07-14 16:27:26 -0700386 mTexture->setImage(2, level, width, height, internalFormat, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000387}
388
Geoff Lang005df412013-10-16 14:12:50 -0400389void TextureCubeMap::setImageNegY(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000390{
Brandon Jones0511e802014-07-14 16:27:26 -0700391 mTexture->setImage(3, level, width, height, internalFormat, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000392}
393
Geoff Lang005df412013-10-16 14:12:50 -0400394void TextureCubeMap::setImagePosZ(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000395{
Brandon Jones0511e802014-07-14 16:27:26 -0700396 mTexture->setImage(4, level, width, height, internalFormat, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000397}
398
Geoff Lang005df412013-10-16 14:12:50 -0400399void TextureCubeMap::setImageNegZ(GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000400{
Brandon Jones0511e802014-07-14 16:27:26 -0700401 mTexture->setImage(5, level, width, height, internalFormat, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000402}
403
Jamie Madill2db197c2013-10-24 17:49:35 -0400404void TextureCubeMap::setCompressedImage(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000405{
Brandon Jones0511e802014-07-14 16:27:26 -0700406 mTexture->setCompressedImage(target, level, format, width, height, imageSize, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000407}
408
Jamie Madill88f18f42013-09-18 14:36:19 -0400409void TextureCubeMap::subImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000410{
Brandon Jones0511e802014-07-14 16:27:26 -0700411 mTexture->subImage(target, level, xoffset, yoffset, width, height, format, type, unpack, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000412}
413
414void TextureCubeMap::subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels)
415{
Brandon Jones0511e802014-07-14 16:27:26 -0700416 mTexture->subImageCompressed(target, level, xoffset, yoffset, width, height, format, imageSize, pixels);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000417}
418
419// Tests for cube map sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 86.
Jamie Madillf8989902013-07-19 16:36:58 -0400420bool TextureCubeMap::isSamplerComplete(const SamplerState &samplerState) const
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000421{
Brandon Jones0511e802014-07-14 16:27:26 -0700422 return mTexture->isSamplerComplete(samplerState);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000423}
424
425// Tests for cube texture completeness. [OpenGL ES 2.0.24] section 3.7.10 page 81.
426bool TextureCubeMap::isCubeComplete() const
427{
Brandon Jones0511e802014-07-14 16:27:26 -0700428 return mTexture->isCubeComplete();
Jamie Madill07edd442013-07-19 16:36:58 -0400429}
430
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000431bool TextureCubeMap::isCompressed(GLenum target, GLint level) const
432{
Geoff Lange4a492b2014-06-19 14:14:41 -0400433 return IsFormatCompressed(getInternalFormat(target, level));
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000434}
435
Geoff Lang8040f572013-07-25 16:49:54 -0400436bool TextureCubeMap::isDepth(GLenum target, GLint level) const
437{
Geoff Lange4a492b2014-06-19 14:14:41 -0400438 return GetDepthBits(getInternalFormat(target, level)) > 0;
Geoff Lang8040f572013-07-25 16:49:54 -0400439}
440
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000441void TextureCubeMap::copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
442{
Brandon Jones0511e802014-07-14 16:27:26 -0700443 mTexture->copyImage(target, level, format, x, y, width, height, source);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000444}
445
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000446void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000447{
Brandon Jones0511e802014-07-14 16:27:26 -0700448 mTexture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000449}
450
451void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size)
452{
Jamie Madill3c0989c2013-10-24 17:49:39 -0400453 mImmutable = true;
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000454
Brandon Jones0511e802014-07-14 16:27:26 -0700455 mTexture->storage(levels, internalformat, size);
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000456}
457
458void TextureCubeMap::generateMipmaps()
459{
Brandon Jones0511e802014-07-14 16:27:26 -0700460 mTexture->generateMipmaps();
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000461}
462
Jamie Madilld3d2a342013-10-07 10:46:35 -0400463const rx::Image *TextureCubeMap::getBaseLevelImage() const
464{
465 // Note: if we are not cube-complete, there is no single base level image that can describe all
466 // cube faces, so this method is only well-defined for a cube-complete base level.
Brandon Jones0511e802014-07-14 16:27:26 -0700467 return mTexture->getImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
Jamie Madill2ebab852013-10-24 17:49:42 -0400468}
469
Jamie Madill2db197c2013-10-24 17:49:35 -0400470unsigned int TextureCubeMap::getRenderTargetSerial(GLenum target, GLint level)
Geoff Lang8040f572013-07-25 16:49:54 -0400471{
Brandon Jones0511e802014-07-14 16:27:26 -0700472 return mTexture->getRenderTargetSerial(target, level);
Geoff Lang8040f572013-07-25 16:49:54 -0400473}
474
475rx::RenderTarget *TextureCubeMap::getRenderTarget(GLenum target, GLint level)
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000476{
Brandon Jones0511e802014-07-14 16:27:26 -0700477 return mTexture->getRenderTarget(target, level);
Geoff Lang8040f572013-07-25 16:49:54 -0400478}
479
480rx::RenderTarget *TextureCubeMap::getDepthStencil(GLenum target, GLint level)
481{
Brandon Jones0511e802014-07-14 16:27:26 -0700482 return mTexture->getDepthStencil(target, level);
daniel@transgaming.com690d8ae2012-10-31 19:52:08 +0000483}
484
Brandon Jones78b1acd2014-07-15 15:33:07 -0700485Texture3D::Texture3D(rx::Texture3DImpl *impl, GLuint id)
486 : Texture(id, GL_TEXTURE_3D),
487 mTexture(impl)
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000488{
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000489}
490
491Texture3D::~Texture3D()
492{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700493 SafeDelete(mTexture);
494}
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000495
Brandon Jones78b1acd2014-07-15 15:33:07 -0700496rx::TextureStorageInterface *Texture3D::getNativeTexture()
497{
498 return mTexture->getNativeTexture();
499}
500
501void Texture3D::setUsage(GLenum usage)
502{
503 mUsage = usage;
504 mTexture->setUsage(usage);
505}
506
507bool Texture3D::hasDirtyImages() const
508{
509 return mTexture->hasDirtyImages();
510}
511
512void Texture3D::resetDirty()
513{
514 mTexture->resetDirty();
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000515}
516
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000517GLsizei Texture3D::getWidth(GLint level) const
518{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700519 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS) ? mTexture->getImage(level)->getWidth() : 0;
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000520}
521
522GLsizei Texture3D::getHeight(GLint level) const
523{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700524 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS) ? mTexture->getImage(level)->getHeight() : 0;
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000525}
526
527GLsizei Texture3D::getDepth(GLint level) const
528{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700529 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS) ? mTexture->getImage(level)->getDepth() : 0;
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000530}
531
532GLenum Texture3D::getInternalFormat(GLint level) const
533{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700534 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS) ? mTexture->getImage(level)->getInternalFormat() : GL_NONE;
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000535}
536
537GLenum Texture3D::getActualFormat(GLint level) const
538{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700539 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS) ? mTexture->getImage(level)->getActualFormat() : GL_NONE;
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000540}
541
542bool Texture3D::isCompressed(GLint level) const
543{
Geoff Lange4a492b2014-06-19 14:14:41 -0400544 return IsFormatCompressed(getInternalFormat(level));
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000545}
546
547bool Texture3D::isDepth(GLint level) const
548{
Geoff Lange4a492b2014-06-19 14:14:41 -0400549 return GetDepthBits(getInternalFormat(level)) > 0;
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000550}
551
Geoff Lang005df412013-10-16 14:12:50 -0400552void Texture3D::setImage(GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000553{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700554 mTexture->setImage(level, width, height, depth, internalFormat, format, type, unpack, pixels);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000555}
556
557void Texture3D::setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels)
558{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700559 mTexture->setCompressedImage(level, format, width, height, depth, imageSize, pixels);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000560}
561
Jamie Madill88f18f42013-09-18 14:36:19 -0400562void Texture3D::subImage(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000563{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700564 mTexture->subImage(level, xoffset, yoffset, zoffset, width, height, depth, format, type, unpack, pixels);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000565}
566
567void Texture3D::subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels)
568{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700569 mTexture->subImageCompressed(level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, pixels);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000570}
571
572void Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
573{
Jamie Madille664e202013-10-24 17:49:40 -0400574 mImmutable = true;
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000575
Brandon Jones78b1acd2014-07-15 15:33:07 -0700576 mTexture->storage(levels, internalformat, width, height, depth);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000577}
578
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000579void Texture3D::generateMipmaps()
580{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700581 mTexture->generateMipmaps();
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000582}
583
Jamie Madilld3d2a342013-10-07 10:46:35 -0400584const rx::Image *Texture3D::getBaseLevelImage() const
585{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700586 return mTexture->getImage(0);
Jamie Madill2ebab852013-10-24 17:49:42 -0400587}
588
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000589void Texture3D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
590{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700591 mTexture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000592}
593
Jamie Madillf8989902013-07-19 16:36:58 -0400594bool Texture3D::isSamplerComplete(const SamplerState &samplerState) const
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000595{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700596 return mTexture->isSamplerComplete(samplerState);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000597}
598
599bool Texture3D::isMipmapComplete() const
600{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700601 return mTexture->isMipmapComplete();
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000602}
603
Geoff Lang8040f572013-07-25 16:49:54 -0400604unsigned int Texture3D::getRenderTargetSerial(GLint level, GLint layer)
605{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700606 return mTexture->getRenderTargetSerial(level, layer);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000607}
608
Jamie Madilla2d4e552013-10-10 15:12:01 -0400609rx::RenderTarget *Texture3D::getRenderTarget(GLint level)
610{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700611 return mTexture->getRenderTarget(level);
Jamie Madilla2d4e552013-10-10 15:12:01 -0400612}
613
Geoff Lang8040f572013-07-25 16:49:54 -0400614rx::RenderTarget *Texture3D::getRenderTarget(GLint level, GLint layer)
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000615{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700616 return mTexture->getRenderTarget(level, layer);
Geoff Lang8040f572013-07-25 16:49:54 -0400617}
618
619rx::RenderTarget *Texture3D::getDepthStencil(GLint level, GLint layer)
620{
Brandon Jones78b1acd2014-07-15 15:33:07 -0700621 return mTexture->getDepthStencil(level, layer);
shannon.woods%transgaming.com@gtempaccount.com95996562013-04-13 03:44:58 +0000622}
623
Brandon Jones142ec422014-07-16 10:31:30 -0700624Texture2DArray::Texture2DArray(rx::Texture2DArrayImpl *impl, GLuint id)
625 : Texture(id, GL_TEXTURE_2D_ARRAY),
626 mTexture(impl)
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000627{
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000628}
629
630Texture2DArray::~Texture2DArray()
631{
Brandon Jones142ec422014-07-16 10:31:30 -0700632 SafeDelete(mTexture);
Jamie Madill884a4622013-10-24 17:49:41 -0400633}
634
Brandon Jones142ec422014-07-16 10:31:30 -0700635rx::TextureStorageInterface *Texture2DArray::getNativeTexture()
Jamie Madill884a4622013-10-24 17:49:41 -0400636{
Brandon Jones142ec422014-07-16 10:31:30 -0700637 return mTexture->getNativeTexture();
638}
639
640void Texture2DArray::setUsage(GLenum usage)
641{
642 mUsage = usage;
643 mTexture->setUsage(usage);
644}
645
646bool Texture2DArray::hasDirtyImages() const
647{
648 return mTexture->hasDirtyImages();
649}
650
651void Texture2DArray::resetDirty()
652{
653 mTexture->resetDirty();
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000654}
655
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000656GLsizei Texture2DArray::getWidth(GLint level) const
657{
Brandon Jones142ec422014-07-16 10:31:30 -0700658 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS && mTexture->getLayerCount(level) > 0) ? mTexture->getImage(level, 0)->getWidth() : 0;
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000659}
660
661GLsizei Texture2DArray::getHeight(GLint level) const
662{
Brandon Jones142ec422014-07-16 10:31:30 -0700663 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS && mTexture->getLayerCount(level) > 0) ? mTexture->getImage(level, 0)->getHeight() : 0;
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000664}
665
Jamie Madillb8f8b892014-01-07 10:12:50 -0500666GLsizei Texture2DArray::getLayers(GLint level) const
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000667{
Brandon Jones142ec422014-07-16 10:31:30 -0700668 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS) ? mTexture->getLayerCount(level) : 0;
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000669}
670
671GLenum Texture2DArray::getInternalFormat(GLint level) const
672{
Brandon Jones142ec422014-07-16 10:31:30 -0700673 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS && mTexture->getLayerCount(level) > 0) ? mTexture->getImage(level, 0)->getInternalFormat() : GL_NONE;
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000674}
675
676GLenum Texture2DArray::getActualFormat(GLint level) const
677{
Brandon Jones142ec422014-07-16 10:31:30 -0700678 return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS && mTexture->getLayerCount(level) > 0) ? mTexture->getImage(level, 0)->getActualFormat() : GL_NONE;
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000679}
680
681bool Texture2DArray::isCompressed(GLint level) const
682{
Geoff Lange4a492b2014-06-19 14:14:41 -0400683 return IsFormatCompressed(getInternalFormat(level));
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000684}
685
686bool Texture2DArray::isDepth(GLint level) const
687{
Geoff Lange4a492b2014-06-19 14:14:41 -0400688 return GetDepthBits(getInternalFormat(level)) > 0;
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000689}
690
Geoff Lang005df412013-10-16 14:12:50 -0400691void Texture2DArray::setImage(GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum internalFormat, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000692{
Brandon Jones142ec422014-07-16 10:31:30 -0700693 mTexture->setImage(level, width, height, depth, internalFormat, format, type, unpack, pixels);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000694}
695
696void Texture2DArray::setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels)
697{
Brandon Jones142ec422014-07-16 10:31:30 -0700698 mTexture->setCompressedImage(level, format, width, height, depth, imageSize, pixels);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000699}
700
Jamie Madill88f18f42013-09-18 14:36:19 -0400701void Texture2DArray::subImage(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels)
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000702{
Brandon Jones142ec422014-07-16 10:31:30 -0700703 mTexture->subImage(level, xoffset, yoffset, zoffset, width, height, depth, format, type, unpack, pixels);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000704}
705
706void Texture2DArray::subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels)
707{
Brandon Jones142ec422014-07-16 10:31:30 -0700708 mTexture->subImageCompressed(level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, pixels);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000709}
710
711void Texture2DArray::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
712{
Jamie Madill884a4622013-10-24 17:49:41 -0400713 mImmutable = true;
Brandon Jones142ec422014-07-16 10:31:30 -0700714
715 mTexture->storage(levels, internalformat, width, height, depth);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000716}
717
718void Texture2DArray::generateMipmaps()
719{
Brandon Jones142ec422014-07-16 10:31:30 -0700720 mTexture->generateMipmaps();
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000721}
722
Jamie Madilld3d2a342013-10-07 10:46:35 -0400723const rx::Image *Texture2DArray::getBaseLevelImage() const
724{
Brandon Jones142ec422014-07-16 10:31:30 -0700725 return (mTexture->getLayerCount(0) > 0 ? mTexture->getImage(0, 0) : NULL);
Jamie Madill2ebab852013-10-24 17:49:42 -0400726}
727
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000728void Texture2DArray::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
729{
Brandon Jones142ec422014-07-16 10:31:30 -0700730 mTexture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000731}
732
Jamie Madillf8989902013-07-19 16:36:58 -0400733bool Texture2DArray::isSamplerComplete(const SamplerState &samplerState) const
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000734{
Brandon Jones142ec422014-07-16 10:31:30 -0700735 return mTexture->isSamplerComplete(samplerState);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000736}
737
738bool Texture2DArray::isMipmapComplete() const
739{
Brandon Jones142ec422014-07-16 10:31:30 -0700740 return mTexture->isMipmapComplete();
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000741}
742
Jamie Madille83d1a92013-10-24 17:49:33 -0400743unsigned int Texture2DArray::getRenderTargetSerial(GLint level, GLint layer)
Geoff Lang8040f572013-07-25 16:49:54 -0400744{
Brandon Jones142ec422014-07-16 10:31:30 -0700745 return mTexture->getRenderTargetSerial(level, layer);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000746}
747
Geoff Lang8040f572013-07-25 16:49:54 -0400748rx::RenderTarget *Texture2DArray::getRenderTarget(GLint level, GLint layer)
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000749{
Brandon Jones142ec422014-07-16 10:31:30 -0700750 return mTexture->getRenderTarget(level, layer);
Geoff Lang8040f572013-07-25 16:49:54 -0400751}
752
753rx::RenderTarget *Texture2DArray::getDepthStencil(GLint level, GLint layer)
754{
Brandon Jones142ec422014-07-16 10:31:30 -0700755 return mTexture->getDepthStencil(level, layer);
shannon.woods%transgaming.com@gtempaccount.com7625f792013-04-13 03:46:07 +0000756}
757
daniel@transgaming.com95a758f2012-07-12 15:17:06 +0000758}