blob: 6c6677ae96b5ec19b1e35b3a6b0ff7d6c4e37ef1 [file] [log] [blame]
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00001//
2// Copyright (c) 2002-2010 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// Texture.h: Defines the abstract gl::Texture class and its concrete derived
8// classes Texture2D and TextureCubeMap. Implements GL texture objects and
9// related functionality. [OpenGL ES 2.0.24] section 3.7 page 63.
10
11#ifndef LIBGLESV2_TEXTURE_H_
12#define LIBGLESV2_TEXTURE_H_
13
daniel@transgaming.com93a81472010-04-20 18:52:58 +000014#include <vector>
15
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000016#define GL_APICALL
17#include <GLES2/gl2.h>
18#include <d3d9.h>
19
daniel@transgaming.come6842292010-04-20 18:52:50 +000020#include "libGLESv2/Renderbuffer.h"
apatrick@chromium.org4e3bad42010-09-15 17:31:48 +000021#include "libGLESv2/RefCountObject.h"
daniel@transgaming.com93a81472010-04-20 18:52:58 +000022#include "libGLESv2/utilities.h"
23#include "common/debug.h"
daniel@transgaming.come6842292010-04-20 18:52:50 +000024
jbauman@chromium.orgae345802011-03-30 22:04:25 +000025namespace egl
26{
27class Surface;
28}
29
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000030namespace gl
31{
daniel@transgaming.comb8c28ed2010-04-13 03:26:32 +000032class Blit;
apatrick@chromium.orgb31f5322011-01-19 19:02:52 +000033class Framebuffer;
daniel@transgaming.comb8c28ed2010-04-13 03:26:32 +000034
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000035enum
36{
daniel@transgaming.com5d752f22010-10-07 13:37:20 +000037 // These are the maximums the implementation can support
38 // The actual GL caps are limited by the device caps
39 // and should be queried from the Context
40 IMPLEMENTATION_MAX_TEXTURE_SIZE = 16384,
41 IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE = 16384,
daniel@transgaming.comfab5a1a2010-03-11 19:22:30 +000042
daniel@transgaming.com5d752f22010-10-07 13:37:20 +000043 IMPLEMENTATION_MAX_TEXTURE_LEVELS = 15 // 1+log2 of MAX_TEXTURE_SIZE
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000044};
45
daniel@transgaming.comdff362f2011-11-09 17:45:08 +000046class Image
daniel@transgaming.comde631782011-11-09 17:45:04 +000047{
daniel@transgaming.comdff362f2011-11-09 17:45:08 +000048 public:
daniel@transgaming.comde631782011-11-09 17:45:04 +000049 Image();
50 ~Image();
51
daniel@transgaming.com41634052011-11-09 17:46:24 +000052 bool redefine(GLenum format, GLsizei width, GLsizei height, GLenum type);
daniel@transgaming.comdff362f2011-11-09 17:45:08 +000053 void markDirty() {mDirty = true;}
54 void markClean() {mDirty = false;}
daniel@transgaming.comde631782011-11-09 17:45:04 +000055
daniel@transgaming.com5cce3ff2011-11-09 17:45:14 +000056 HRESULT lock(D3DLOCKED_RECT *lockedRect, const RECT *rect);
57 void unlock();
58
daniel@transgaming.comde631782011-11-09 17:45:04 +000059 bool isRenderable() const;
60 D3DFORMAT getD3DFormat() const;
61
daniel@transgaming.comdff362f2011-11-09 17:45:08 +000062 GLsizei getWidth() const {return mWidth;}
63 GLsizei getHeight() const {return mHeight;}
64 GLenum getFormat() const {return mFormat;}
65 GLenum getType() const {return mType;}
daniel@transgaming.com5cce3ff2011-11-09 17:45:14 +000066 bool isDirty() const {return mSurface && mDirty;}
daniel@transgaming.com73de05a2011-11-09 17:45:24 +000067 IDirect3DSurface9 *getSurface();
daniel@transgaming.comde631782011-11-09 17:45:04 +000068
daniel@transgaming.com0c67f3c2011-11-09 17:45:38 +000069 void loadData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum type,
daniel@transgaming.comf749f0e2011-11-09 17:45:34 +000070 GLint unpackAlignment, const void *input, std::size_t outputPitch, void *output) const;
71
72 void loadAlphaData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
73 int inputPitch, const void *input, size_t outputPitch, void *output) const;
74 void loadAlphaFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
75 int inputPitch, const void *input, size_t outputPitch, void *output) const;
76 void loadAlphaHalfFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
77 int inputPitch, const void *input, size_t outputPitch, void *output) const;
78 void loadLuminanceData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
79 int inputPitch, const void *input, size_t outputPitch, void *output, bool native) const;
80 void loadLuminanceFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
81 int inputPitch, const void *input, size_t outputPitch, void *output) const;
82 void loadLuminanceHalfFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
83 int inputPitch, const void *input, size_t outputPitch, void *output) const;
84 void loadLuminanceAlphaData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
85 int inputPitch, const void *input, size_t outputPitch, void *output, bool native) const;
86 void loadLuminanceAlphaFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
87 int inputPitch, const void *input, size_t outputPitch, void *output) const;
88 void loadLuminanceAlphaHalfFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
89 int inputPitch, const void *input, size_t outputPitch, void *output) const;
90 void loadRGBUByteData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
91 int inputPitch, const void *input, size_t outputPitch, void *output) const;
92 void loadRGB565Data(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
93 int inputPitch, const void *input, size_t outputPitch, void *output) const;
94 void loadRGBFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
95 int inputPitch, const void *input, size_t outputPitch, void *output) const;
96 void loadRGBHalfFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
97 int inputPitch, const void *input, size_t outputPitch, void *output) const;
98 void loadRGBAUByteDataSSE2(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
99 int inputPitch, const void *input, size_t outputPitch, void *output) const;
100 void loadRGBAUByteData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
101 int inputPitch, const void *input, size_t outputPitch, void *output) const;
102 void loadRGBA4444Data(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
103 int inputPitch, const void *input, size_t outputPitch, void *output) const;
104 void loadRGBA5551Data(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
105 int inputPitch, const void *input, size_t outputPitch, void *output) const;
106 void loadRGBAFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
107 int inputPitch, const void *input, size_t outputPitch, void *output) const;
108 void loadRGBAHalfFloatData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
109 int inputPitch, const void *input, size_t outputPitch, void *output) const;
110 void loadBGRAData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
111 int inputPitch, const void *input, size_t outputPitch, void *output) const;
112 void loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
113 int inputPitch, const void *input, size_t outputPitch, void *output) const;
114 void loadDXT1Data(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
115 int inputPitch, const void *input, size_t outputPitch, void *output) const;
116 void loadDXT3Data(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
117 int inputPitch, const void *input, size_t outputPitch, void *output) const;
118 void loadDXT5Data(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
119 int inputPitch, const void *input, size_t outputPitch, void *output) const;
120
daniel@transgaming.com90cfcc92011-11-09 17:45:48 +0000121 void copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, IDirect3DSurface9 *renderTarget);
122
daniel@transgaming.comdff362f2011-11-09 17:45:08 +0000123 private:
124 DISALLOW_COPY_AND_ASSIGN(Image);
daniel@transgaming.comde631782011-11-09 17:45:04 +0000125
daniel@transgaming.com73de05a2011-11-09 17:45:24 +0000126 void createSurface();
127
daniel@transgaming.comdff362f2011-11-09 17:45:08 +0000128 GLsizei mWidth;
129 GLsizei mHeight;
130 GLenum mFormat;
131 GLenum mType;
132
133 bool mDirty;
134
135 IDirect3DSurface9 *mSurface;
daniel@transgaming.comde631782011-11-09 17:45:04 +0000136};
137
daniel@transgaming.comdc82bf92011-11-11 04:10:08 +0000138class TextureStorage
139{
140 public:
141 explicit TextureStorage(bool renderable);
142
143 virtual ~TextureStorage();
144
145 bool isRenderable();
146
147 private:
148 DISALLOW_COPY_AND_ASSIGN(TextureStorage);
149
150 bool mIsRenderable;
151};
152
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000153class Texture : public RefCountObject
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000154{
155 public:
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000156 explicit Texture(GLuint id);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000157
daniel@transgaming.com93a81472010-04-20 18:52:58 +0000158 virtual ~Texture();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000159
160 virtual GLenum getTarget() const = 0;
161
162 bool setMinFilter(GLenum filter);
163 bool setMagFilter(GLenum filter);
164 bool setWrapS(GLenum wrap);
165 bool setWrapT(GLenum wrap);
166
daniel@transgaming.com00c75962010-03-11 20:36:15 +0000167 GLenum getMinFilter() const;
168 GLenum getMagFilter() const;
169 GLenum getWrapS() const;
170 GLenum getWrapT() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000171
daniel@transgaming.com61208202011-03-21 16:38:50 +0000172 virtual GLsizei getWidth() const = 0;
173 virtual GLsizei getHeight() const = 0;
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000174 virtual GLenum getInternalFormat() const = 0;
daniel@transgaming.com61208202011-03-21 16:38:50 +0000175 virtual GLenum getType() const = 0;
daniel@transgaming.com549bdef2011-03-29 00:57:01 +0000176 virtual D3DFORMAT getD3DFormat() const = 0;
daniel@transgaming.com61208202011-03-21 16:38:50 +0000177
daniel@transgaming.com00c75962010-03-11 20:36:15 +0000178 virtual bool isComplete() const = 0;
daniel@transgaming.com01868132010-08-24 19:21:17 +0000179 virtual bool isCompressed() const = 0;
daniel@transgaming.com7051b972010-03-21 04:31:07 +0000180
daniel@transgaming.com29d27002010-03-11 19:41:22 +0000181 IDirect3DBaseTexture9 *getTexture();
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000182 virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000183
daniel@transgaming.com8fd99e22010-04-20 18:52:00 +0000184 virtual void generateMipmaps() = 0;
apatrick@chromium.orgb31f5322011-01-19 19:02:52 +0000185 virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;
daniel@transgaming.com8fd99e22010-04-20 18:52:00 +0000186
daniel@transgaming.com0da803b2011-11-09 17:44:58 +0000187 bool hasDirtyParameters() const;
188 bool hasDirtyImages() const;
daniel@transgaming.com38e76e52011-03-21 16:39:10 +0000189 void resetDirty();
daniel@transgaming.coma9eb5da2011-03-21 16:39:16 +0000190 unsigned int getSerial() const;
daniel@transgaming.com5a0b0a82010-05-12 03:45:07 +0000191
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000192 static const GLuint INCOMPLETE_TEXTURE_ID = static_cast<GLuint>(-1); // Every texture takes an id at creation time. The value is arbitrary because it is never registered with the resource manager.
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000193
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000194 protected:
daniel@transgaming.comd14558a2011-11-09 17:46:18 +0000195 friend class RenderbufferTexture;
daniel@transgaming.com93a81472010-04-20 18:52:58 +0000196
daniel@transgaming.com61208202011-03-21 16:38:50 +0000197 void setImage(GLint unpackAlignment, const void *pixels, Image *image);
daniel@transgaming.comb5a3a6b2011-03-21 16:38:46 +0000198 bool subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image);
daniel@transgaming.com61208202011-03-21 16:38:50 +0000199 void setCompressedImage(GLsizei imageSize, const void *pixels, Image *image);
daniel@transgaming.comb5a3a6b2011-03-21 16:38:46 +0000200 bool subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, Image *image);
daniel@transgaming.com29d27002010-03-11 19:41:22 +0000201
daniel@transgaming.comf81103a2011-11-09 17:46:28 +0000202 GLint creationLevels(GLsizei width, GLsizei height) const;
203 GLint creationLevels(GLsizei size) const;
daniel@transgaming.comc808c5a2010-05-14 17:31:01 +0000204
daniel@transgaming.com68076a02011-03-21 16:38:09 +0000205 virtual IDirect3DBaseTexture9 *getBaseTexture() const = 0;
206 virtual void createTexture() = 0;
daniel@transgaming.com00c75962010-03-11 20:36:15 +0000207 virtual void updateTexture() = 0;
daniel@transgaming.com68076a02011-03-21 16:38:09 +0000208 virtual void convertToRenderTarget() = 0;
daniel@transgaming.com93a81472010-04-20 18:52:58 +0000209 virtual IDirect3DSurface9 *getRenderTarget(GLenum target) = 0;
daniel@transgaming.com29d27002010-03-11 19:41:22 +0000210
daniel@transgaming.comb8c28ed2010-04-13 03:26:32 +0000211 Blit *getBlitter();
212
daniel@transgaming.com31273552010-08-04 13:42:44 +0000213 int levelCount() const;
214
daniel@transgaming.com31273552010-08-04 13:42:44 +0000215 GLenum mMinFilter;
216 GLenum mMagFilter;
217 GLenum mWrapS;
218 GLenum mWrapT;
daniel@transgaming.com0da803b2011-11-09 17:44:58 +0000219 bool mDirtyParameters;
daniel@transgaming.coma06aa872011-03-21 17:22:21 +0000220
daniel@transgaming.com0da803b2011-11-09 17:44:58 +0000221 bool mDirtyImages;
daniel@transgaming.comc808c5a2010-05-14 17:31:01 +0000222
daniel@transgaming.comc1fde762011-11-09 17:46:07 +0000223 unsigned int mSerial;
daniel@transgaming.coma9eb5da2011-03-21 16:39:16 +0000224 static unsigned int issueSerial();
225
daniel@transgaming.comc1fde762011-11-09 17:46:07 +0000226 private:
227 DISALLOW_COPY_AND_ASSIGN(Texture);
daniel@transgaming.coma9eb5da2011-03-21 16:39:16 +0000228
229 static unsigned int mCurrentSerial;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000230};
231
daniel@transgaming.comdc82bf92011-11-11 04:10:08 +0000232class TextureStorage2D : public TextureStorage
233{
234 public:
235 TextureStorage2D(IDirect3DTexture9 *texture, bool renderable);
236
237 virtual ~TextureStorage2D();
238
239 IDirect3DSurface9 *getSurfaceLevel(int level);
240 IDirect3DBaseTexture9 *getBaseTexture() const;
241
242 private:
243 DISALLOW_COPY_AND_ASSIGN(TextureStorage2D);
244
245 IDirect3DTexture9 *mTexture;
246};
247
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000248class Texture2D : public Texture
249{
250 public:
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000251 explicit Texture2D(GLuint id);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000252
253 ~Texture2D();
254
daniel@transgaming.comd976b582011-03-29 00:56:20 +0000255 virtual GLenum getTarget() const;
daniel@transgaming.com61208202011-03-21 16:38:50 +0000256
257 virtual GLsizei getWidth() const;
258 virtual GLsizei getHeight() const;
259 virtual GLenum getInternalFormat() const;
260 virtual GLenum getType() const;
daniel@transgaming.com549bdef2011-03-29 00:57:01 +0000261 virtual D3DFORMAT getD3DFormat() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000262
daniel@transgaming.com8a0a2db2011-03-21 16:38:20 +0000263 void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
264 void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
daniel@transgaming.com3489e3a2010-03-21 04:31:11 +0000265 void subImage(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
daniel@transgaming.com01868132010-08-24 19:21:17 +0000266 void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
daniel@transgaming.com8a0a2db2011-03-21 16:38:20 +0000267 void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
daniel@transgaming.com0c67f3c2011-11-09 17:45:38 +0000268 virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000269
daniel@transgaming.comd976b582011-03-29 00:56:20 +0000270 virtual bool isComplete() const;
271 virtual bool isCompressed() const;
jbauman@chromium.orgae345802011-03-30 22:04:25 +0000272 virtual void bindTexImage(egl::Surface *surface);
273 virtual void releaseTexImage();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000274
daniel@transgaming.com8fd99e22010-04-20 18:52:00 +0000275 virtual void generateMipmaps();
276
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000277 virtual Renderbuffer *getRenderbuffer(GLenum target);
daniel@transgaming.com93a81472010-04-20 18:52:58 +0000278
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000279 private:
280 DISALLOW_COPY_AND_ASSIGN(Texture2D);
281
daniel@transgaming.com68076a02011-03-21 16:38:09 +0000282 virtual IDirect3DBaseTexture9 *getBaseTexture() const;
283 virtual void createTexture();
daniel@transgaming.com00c75962010-03-11 20:36:15 +0000284 virtual void updateTexture();
daniel@transgaming.com68076a02011-03-21 16:38:09 +0000285 virtual void convertToRenderTarget();
daniel@transgaming.com31273552010-08-04 13:42:44 +0000286 virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
daniel@transgaming.com29d27002010-03-11 19:41:22 +0000287
daniel@transgaming.com1a01e832011-11-09 17:45:57 +0000288 void redefineImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type);
daniel@transgaming.com842f7a42010-03-21 04:31:03 +0000289 void commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
290
daniel@transgaming.com5d752f22010-10-07 13:37:20 +0000291 Image mImageArray[IMPLEMENTATION_MAX_TEXTURE_LEVELS];
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000292
daniel@transgaming.comdc82bf92011-11-11 04:10:08 +0000293 TextureStorage2D *mTexture;
jbauman@chromium.orgae345802011-03-30 22:04:25 +0000294 egl::Surface *mSurface;
daniel@transgaming.comb8c28ed2010-04-13 03:26:32 +0000295
apatrick@chromium.org4e3bad42010-09-15 17:31:48 +0000296 BindingPointer<Renderbuffer> mColorbufferProxy;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000297};
298
daniel@transgaming.comdc82bf92011-11-11 04:10:08 +0000299class TextureStorageCubeMap : public TextureStorage
300{
301 public:
302 TextureStorageCubeMap(IDirect3DCubeTexture9 *texture, bool renderable);
303
304 virtual ~TextureStorageCubeMap();
305
daniel@transgaming.comafa8ef32011-11-11 04:10:13 +0000306 IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level);
daniel@transgaming.comdc82bf92011-11-11 04:10:08 +0000307 IDirect3DBaseTexture9 *getBaseTexture() const;
308
309 private:
310 DISALLOW_COPY_AND_ASSIGN(TextureStorageCubeMap);
311
312 IDirect3DCubeTexture9 *mTexture;
313};
314
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000315class TextureCubeMap : public Texture
316{
317 public:
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000318 explicit TextureCubeMap(GLuint id);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000319
320 ~TextureCubeMap();
321
daniel@transgaming.com61208202011-03-21 16:38:50 +0000322 virtual GLenum getTarget() const;
323
324 virtual GLsizei getWidth() const;
325 virtual GLsizei getHeight() const;
326 virtual GLenum getInternalFormat() const;
327 virtual GLenum getType() const;
daniel@transgaming.com549bdef2011-03-29 00:57:01 +0000328 virtual D3DFORMAT getD3DFormat() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000329
daniel@transgaming.com8a0a2db2011-03-21 16:38:20 +0000330 void setImagePosX(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
331 void setImageNegX(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
332 void setImagePosY(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
333 void setImageNegY(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
334 void setImagePosZ(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
335 void setImageNegZ(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000336
daniel@transgaming.com8a0a2db2011-03-21 16:38:20 +0000337 void setCompressedImage(GLenum face, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
daniel@transgaming.com01868132010-08-24 19:21:17 +0000338
daniel@transgaming.com3f85fbb2010-10-15 17:58:05 +0000339 void subImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
340 void subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
daniel@transgaming.com8a0a2db2011-03-21 16:38:20 +0000341 void copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
daniel@transgaming.comd976b582011-03-29 00:56:20 +0000342 virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
daniel@transgaming.com00c75962010-03-11 20:36:15 +0000343
daniel@transgaming.comd976b582011-03-29 00:56:20 +0000344 virtual bool isComplete() const;
345 virtual bool isCompressed() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000346
daniel@transgaming.com8fd99e22010-04-20 18:52:00 +0000347 virtual void generateMipmaps();
348
daniel@transgaming.comd2fd4f22011-02-01 18:49:11 +0000349 virtual Renderbuffer *getRenderbuffer(GLenum target);
daniel@transgaming.com93a81472010-04-20 18:52:58 +0000350
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000351 private:
352 DISALLOW_COPY_AND_ASSIGN(TextureCubeMap);
353
daniel@transgaming.com68076a02011-03-21 16:38:09 +0000354 virtual IDirect3DBaseTexture9 *getBaseTexture() const;
355 virtual void createTexture();
daniel@transgaming.com00c75962010-03-11 20:36:15 +0000356 virtual void updateTexture();
daniel@transgaming.com68076a02011-03-21 16:38:09 +0000357 virtual void convertToRenderTarget();
daniel@transgaming.com31273552010-08-04 13:42:44 +0000358 virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
daniel@transgaming.com00c75962010-03-11 20:36:15 +0000359
360 static unsigned int faceIndex(GLenum face);
daniel@transgaming.com29d27002010-03-11 19:41:22 +0000361
daniel@transgaming.com8fd99e22010-04-20 18:52:00 +0000362 bool isCubeComplete() const;
363
daniel@transgaming.com61208202011-03-21 16:38:50 +0000364 void setImage(int faceIndex, GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
daniel@transgaming.comb612f882011-11-09 17:44:31 +0000365 void commitRect(int faceIndex, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
daniel@transgaming.com68ae2992011-11-09 17:44:49 +0000366 void redefineImage(int faceIndex, GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000367
daniel@transgaming.com5d752f22010-10-07 13:37:20 +0000368 Image mImageArray[6][IMPLEMENTATION_MAX_TEXTURE_LEVELS];
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000369
daniel@transgaming.comdc82bf92011-11-11 04:10:08 +0000370 TextureStorageCubeMap *mTexture;
daniel@transgaming.com93a81472010-04-20 18:52:58 +0000371
apatrick@chromium.org4e3bad42010-09-15 17:31:48 +0000372 BindingPointer<Renderbuffer> mFaceProxies[6];
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000373};
374}
375
daniel@transgaming.comafa8ef32011-11-11 04:10:13 +0000376#endif // LIBGLESV2_TEXTURE_H_