xref: /aosp_15_r20/external/deqp/framework/opengl/gluTexture.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _GLUTEXTURE_HPP
2*35238bceSAndroid Build Coastguard Worker #define _GLUTEXTURE_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES Utilities
5*35238bceSAndroid Build Coastguard Worker  * ------------------------------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Texture classes.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "gluDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuCompressedTexture.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "tcuResource.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "deArrayBuffer.hpp"
33*35238bceSAndroid Build Coastguard Worker 
34*35238bceSAndroid Build Coastguard Worker #include <vector>
35*35238bceSAndroid Build Coastguard Worker #include <string>
36*35238bceSAndroid Build Coastguard Worker 
37*35238bceSAndroid Build Coastguard Worker namespace glu
38*35238bceSAndroid Build Coastguard Worker {
39*35238bceSAndroid Build Coastguard Worker 
40*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
41*35238bceSAndroid Build Coastguard Worker  * \brief 1D Texture only supported on OpenGL
42*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
43*35238bceSAndroid Build Coastguard Worker class Texture1D
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker public:
46*35238bceSAndroid Build Coastguard Worker     Texture1D(const RenderContext &context, uint32_t format, uint32_t dataType, int width);
47*35238bceSAndroid Build Coastguard Worker     Texture1D(const RenderContext &context, uint32_t internalFormat, int width);
48*35238bceSAndroid Build Coastguard Worker     ~Texture1D(void);
49*35238bceSAndroid Build Coastguard Worker 
getRefTexture(void)50*35238bceSAndroid Build Coastguard Worker     tcu::Texture1D &getRefTexture(void)
51*35238bceSAndroid Build Coastguard Worker     {
52*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
53*35238bceSAndroid Build Coastguard Worker     }
getRefTexture(void) const54*35238bceSAndroid Build Coastguard Worker     const tcu::Texture1D &getRefTexture(void) const
55*35238bceSAndroid Build Coastguard Worker     {
56*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
57*35238bceSAndroid Build Coastguard Worker     }
getGLTexture(void) const58*35238bceSAndroid Build Coastguard Worker     uint32_t getGLTexture(void) const
59*35238bceSAndroid Build Coastguard Worker     {
60*35238bceSAndroid Build Coastguard Worker         return m_glTexture;
61*35238bceSAndroid Build Coastguard Worker     }
62*35238bceSAndroid Build Coastguard Worker 
63*35238bceSAndroid Build Coastguard Worker     void upload(void);
64*35238bceSAndroid Build Coastguard Worker 
65*35238bceSAndroid Build Coastguard Worker private:
66*35238bceSAndroid Build Coastguard Worker     Texture1D(const Texture1D &other);            // Not allowed!
67*35238bceSAndroid Build Coastguard Worker     Texture1D &operator=(const Texture1D &other); // Not allowed!
68*35238bceSAndroid Build Coastguard Worker 
69*35238bceSAndroid Build Coastguard Worker     const RenderContext &m_context;
70*35238bceSAndroid Build Coastguard Worker     uint32_t m_format; //!< Internal format.
71*35238bceSAndroid Build Coastguard Worker     tcu::Texture1D m_refTexture;
72*35238bceSAndroid Build Coastguard Worker     uint32_t m_glTexture;
73*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
74*35238bceSAndroid Build Coastguard Worker 
75*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
76*35238bceSAndroid Build Coastguard Worker  * \brief 2D Texture
77*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
78*35238bceSAndroid Build Coastguard Worker class Texture2D
79*35238bceSAndroid Build Coastguard Worker {
80*35238bceSAndroid Build Coastguard Worker public:
81*35238bceSAndroid Build Coastguard Worker     Texture2D(const RenderContext &context, const ContextInfo &contextInfo, int numLevels,
82*35238bceSAndroid Build Coastguard Worker               const tcu::CompressedTexture *levels,
83*35238bceSAndroid Build Coastguard Worker               const tcu::TexDecompressionParams &decompressionParams = tcu::TexDecompressionParams());
84*35238bceSAndroid Build Coastguard Worker     Texture2D(const RenderContext &context, uint32_t format, uint32_t dataType, int width, int height);
85*35238bceSAndroid Build Coastguard Worker     Texture2D(const RenderContext &context, uint32_t internalFormat, int width, int height);
86*35238bceSAndroid Build Coastguard Worker     virtual ~Texture2D(void);
87*35238bceSAndroid Build Coastguard Worker 
88*35238bceSAndroid Build Coastguard Worker     virtual void upload(void); // Not supported on compressed textures.
89*35238bceSAndroid Build Coastguard Worker 
getRefTexture(void)90*35238bceSAndroid Build Coastguard Worker     tcu::Texture2D &getRefTexture(void)
91*35238bceSAndroid Build Coastguard Worker     {
92*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
93*35238bceSAndroid Build Coastguard Worker     }
getRefTexture(void) const94*35238bceSAndroid Build Coastguard Worker     const tcu::Texture2D &getRefTexture(void) const
95*35238bceSAndroid Build Coastguard Worker     {
96*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
97*35238bceSAndroid Build Coastguard Worker     }
getGLTexture(void) const98*35238bceSAndroid Build Coastguard Worker     uint32_t getGLTexture(void) const
99*35238bceSAndroid Build Coastguard Worker     {
100*35238bceSAndroid Build Coastguard Worker         return m_glTexture;
101*35238bceSAndroid Build Coastguard Worker     }
102*35238bceSAndroid Build Coastguard Worker 
103*35238bceSAndroid Build Coastguard Worker     static Texture2D *create(const RenderContext &context, const ContextInfo &contextInfo, const tcu::Archive &archive,
104*35238bceSAndroid Build Coastguard Worker                              int numLevels, const std::vector<std::string> &filenames);
105*35238bceSAndroid Build Coastguard Worker     static Texture2D *create(const RenderContext &context, const ContextInfo &contextInfo, const tcu::Archive &archive,
106*35238bceSAndroid Build Coastguard Worker                              int numLevels, const char *const *filenames);
create(const RenderContext & context,const ContextInfo & contextInfo,const tcu::Archive & archive,const char * filename)107*35238bceSAndroid Build Coastguard Worker     static Texture2D *create(const RenderContext &context, const ContextInfo &contextInfo, const tcu::Archive &archive,
108*35238bceSAndroid Build Coastguard Worker                              const char *filename)
109*35238bceSAndroid Build Coastguard Worker     {
110*35238bceSAndroid Build Coastguard Worker         return create(context, contextInfo, archive, 1, &filename);
111*35238bceSAndroid Build Coastguard Worker     }
112*35238bceSAndroid Build Coastguard Worker 
113*35238bceSAndroid Build Coastguard Worker protected:
114*35238bceSAndroid Build Coastguard Worker     const RenderContext &m_context;
115*35238bceSAndroid Build Coastguard Worker 
116*35238bceSAndroid Build Coastguard Worker     bool m_isCompressed;
117*35238bceSAndroid Build Coastguard Worker     uint32_t m_format; //!< Internal format.
118*35238bceSAndroid Build Coastguard Worker     tcu::Texture2D m_refTexture;
119*35238bceSAndroid Build Coastguard Worker 
120*35238bceSAndroid Build Coastguard Worker     uint32_t m_glTexture;
121*35238bceSAndroid Build Coastguard Worker 
122*35238bceSAndroid Build Coastguard Worker private:
123*35238bceSAndroid Build Coastguard Worker     Texture2D(const Texture2D &other);            // Not allowed!
124*35238bceSAndroid Build Coastguard Worker     Texture2D &operator=(const Texture2D &other); // Not allowed!
125*35238bceSAndroid Build Coastguard Worker 
126*35238bceSAndroid Build Coastguard Worker     void loadCompressed(int numLevels, const tcu::CompressedTexture *levels,
127*35238bceSAndroid Build Coastguard Worker                         const tcu::TexDecompressionParams &decompressionParams);
128*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
129*35238bceSAndroid Build Coastguard Worker 
130*35238bceSAndroid Build Coastguard Worker class ImmutableTexture2D : public Texture2D
131*35238bceSAndroid Build Coastguard Worker {
132*35238bceSAndroid Build Coastguard Worker public:
133*35238bceSAndroid Build Coastguard Worker     ImmutableTexture2D(const RenderContext &context, uint32_t internalFormat, int width, int height);
134*35238bceSAndroid Build Coastguard Worker 
135*35238bceSAndroid Build Coastguard Worker     void upload(void); // Not supported on compressed textures.
136*35238bceSAndroid Build Coastguard Worker 
137*35238bceSAndroid Build Coastguard Worker private:
138*35238bceSAndroid Build Coastguard Worker     ImmutableTexture2D(const ImmutableTexture2D &other);            // Not allowed!
139*35238bceSAndroid Build Coastguard Worker     ImmutableTexture2D &operator=(const ImmutableTexture2D &other); // Not allowed!
140*35238bceSAndroid Build Coastguard Worker };
141*35238bceSAndroid Build Coastguard Worker 
142*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
143*35238bceSAndroid Build Coastguard Worker  * \brief Cube Map Texture
144*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
145*35238bceSAndroid Build Coastguard Worker class TextureCube
146*35238bceSAndroid Build Coastguard Worker {
147*35238bceSAndroid Build Coastguard Worker public:
148*35238bceSAndroid Build Coastguard Worker     // For compressed cubemap constructor and create() function input level pointers / filenames are expected
149*35238bceSAndroid Build Coastguard Worker     // to laid out to array in following order:
150*35238bceSAndroid Build Coastguard Worker     //   { l0_neg_x, l0_pos_x, l0_neg_y, l0_pos_y, l0_neg_z, l0_pos_z, l1_neg_x, l1_pos_x, ... }
151*35238bceSAndroid Build Coastguard Worker 
152*35238bceSAndroid Build Coastguard Worker     TextureCube(const RenderContext &context, const ContextInfo &contextInfo, int numLevels,
153*35238bceSAndroid Build Coastguard Worker                 const tcu::CompressedTexture *levels,
154*35238bceSAndroid Build Coastguard Worker                 const tcu::TexDecompressionParams &decompressionParams = tcu::TexDecompressionParams());
155*35238bceSAndroid Build Coastguard Worker     TextureCube(const RenderContext &context, uint32_t format, uint32_t dataType, int size);
156*35238bceSAndroid Build Coastguard Worker     TextureCube(const RenderContext &context, uint32_t internalFormat, int size);
157*35238bceSAndroid Build Coastguard Worker     ~TextureCube(void);
158*35238bceSAndroid Build Coastguard Worker 
159*35238bceSAndroid Build Coastguard Worker     void upload(void); // Not supported on compressed textures.
160*35238bceSAndroid Build Coastguard Worker 
getRefTexture(void)161*35238bceSAndroid Build Coastguard Worker     tcu::TextureCube &getRefTexture(void)
162*35238bceSAndroid Build Coastguard Worker     {
163*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
164*35238bceSAndroid Build Coastguard Worker     }
getRefTexture(void) const165*35238bceSAndroid Build Coastguard Worker     const tcu::TextureCube &getRefTexture(void) const
166*35238bceSAndroid Build Coastguard Worker     {
167*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
168*35238bceSAndroid Build Coastguard Worker     }
getGLTexture(void) const169*35238bceSAndroid Build Coastguard Worker     uint32_t getGLTexture(void) const
170*35238bceSAndroid Build Coastguard Worker     {
171*35238bceSAndroid Build Coastguard Worker         return m_glTexture;
172*35238bceSAndroid Build Coastguard Worker     }
173*35238bceSAndroid Build Coastguard Worker 
174*35238bceSAndroid Build Coastguard Worker     static TextureCube *create(const RenderContext &context, const ContextInfo &contextInfo,
175*35238bceSAndroid Build Coastguard Worker                                const tcu::Archive &archive, int numLevels, const std::vector<std::string> &filenames);
176*35238bceSAndroid Build Coastguard Worker     static TextureCube *create(const RenderContext &context, const ContextInfo &contextInfo,
177*35238bceSAndroid Build Coastguard Worker                                const tcu::Archive &archive, int numLevels, const char *const *filenames);
178*35238bceSAndroid Build Coastguard Worker 
179*35238bceSAndroid Build Coastguard Worker private:
180*35238bceSAndroid Build Coastguard Worker     TextureCube(const TextureCube &other);            // Not allowed!
181*35238bceSAndroid Build Coastguard Worker     TextureCube &operator=(const TextureCube &other); // Not allowed!
182*35238bceSAndroid Build Coastguard Worker 
183*35238bceSAndroid Build Coastguard Worker     void loadCompressed(int numLevels, const tcu::CompressedTexture *levels,
184*35238bceSAndroid Build Coastguard Worker                         const tcu::TexDecompressionParams &decompressionParams);
185*35238bceSAndroid Build Coastguard Worker 
186*35238bceSAndroid Build Coastguard Worker     const RenderContext &m_context;
187*35238bceSAndroid Build Coastguard Worker 
188*35238bceSAndroid Build Coastguard Worker     bool m_isCompressed;
189*35238bceSAndroid Build Coastguard Worker     uint32_t m_format; //!< Internal format.
190*35238bceSAndroid Build Coastguard Worker 
191*35238bceSAndroid Build Coastguard Worker     tcu::TextureCube m_refTexture;
192*35238bceSAndroid Build Coastguard Worker     uint32_t m_glTexture;
193*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
194*35238bceSAndroid Build Coastguard Worker 
195*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
196*35238bceSAndroid Build Coastguard Worker  * \brief 2D Array Texture
197*35238bceSAndroid Build Coastguard Worker  * \note Not supported on OpenGL ES 2
198*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
199*35238bceSAndroid Build Coastguard Worker class Texture2DArray
200*35238bceSAndroid Build Coastguard Worker {
201*35238bceSAndroid Build Coastguard Worker public:
202*35238bceSAndroid Build Coastguard Worker     Texture2DArray(const RenderContext &context, uint32_t format, uint32_t dataType, int width, int height,
203*35238bceSAndroid Build Coastguard Worker                    int numLayers);
204*35238bceSAndroid Build Coastguard Worker     Texture2DArray(const RenderContext &context, uint32_t internalFormat, int width, int height, int numLayers);
205*35238bceSAndroid Build Coastguard Worker     Texture2DArray(const RenderContext &context, const ContextInfo &contextInfo, int numLevels,
206*35238bceSAndroid Build Coastguard Worker                    const tcu::CompressedTexture *levels,
207*35238bceSAndroid Build Coastguard Worker                    const tcu::TexDecompressionParams &decompressionParams = tcu::TexDecompressionParams());
208*35238bceSAndroid Build Coastguard Worker     ~Texture2DArray(void);
209*35238bceSAndroid Build Coastguard Worker 
210*35238bceSAndroid Build Coastguard Worker     void upload(void);
211*35238bceSAndroid Build Coastguard Worker 
getRefTexture(void)212*35238bceSAndroid Build Coastguard Worker     tcu::Texture2DArray &getRefTexture(void)
213*35238bceSAndroid Build Coastguard Worker     {
214*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
215*35238bceSAndroid Build Coastguard Worker     }
getRefTexture(void) const216*35238bceSAndroid Build Coastguard Worker     const tcu::Texture2DArray &getRefTexture(void) const
217*35238bceSAndroid Build Coastguard Worker     {
218*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
219*35238bceSAndroid Build Coastguard Worker     }
getGLTexture(void) const220*35238bceSAndroid Build Coastguard Worker     uint32_t getGLTexture(void) const
221*35238bceSAndroid Build Coastguard Worker     {
222*35238bceSAndroid Build Coastguard Worker         return m_glTexture;
223*35238bceSAndroid Build Coastguard Worker     }
224*35238bceSAndroid Build Coastguard Worker 
225*35238bceSAndroid Build Coastguard Worker private:
226*35238bceSAndroid Build Coastguard Worker     Texture2DArray(const Texture2DArray &other);            // Not allowed!
227*35238bceSAndroid Build Coastguard Worker     Texture2DArray &operator=(const Texture2DArray &other); // Not allowed!
228*35238bceSAndroid Build Coastguard Worker 
229*35238bceSAndroid Build Coastguard Worker     void loadCompressed(int numLevels, const tcu::CompressedTexture *levels,
230*35238bceSAndroid Build Coastguard Worker                         const tcu::TexDecompressionParams &decompressionParams);
231*35238bceSAndroid Build Coastguard Worker 
232*35238bceSAndroid Build Coastguard Worker     const RenderContext &m_context;
233*35238bceSAndroid Build Coastguard Worker 
234*35238bceSAndroid Build Coastguard Worker     bool m_isCompressed;
235*35238bceSAndroid Build Coastguard Worker     uint32_t m_format; //!< Internal format.
236*35238bceSAndroid Build Coastguard Worker 
237*35238bceSAndroid Build Coastguard Worker     tcu::Texture2DArray m_refTexture;
238*35238bceSAndroid Build Coastguard Worker     uint32_t m_glTexture;
239*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
240*35238bceSAndroid Build Coastguard Worker 
241*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
242*35238bceSAndroid Build Coastguard Worker  * \brief 1D Array Texture
243*35238bceSAndroid Build Coastguard Worker  * \note Only supported on OpenGL
244*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
245*35238bceSAndroid Build Coastguard Worker class Texture1DArray
246*35238bceSAndroid Build Coastguard Worker {
247*35238bceSAndroid Build Coastguard Worker public:
248*35238bceSAndroid Build Coastguard Worker     Texture1DArray(const RenderContext &context, uint32_t format, uint32_t dataType, int width, int numLayers);
249*35238bceSAndroid Build Coastguard Worker     Texture1DArray(const RenderContext &context, uint32_t internalFormat, int width, int numLayers);
250*35238bceSAndroid Build Coastguard Worker     ~Texture1DArray(void);
251*35238bceSAndroid Build Coastguard Worker 
252*35238bceSAndroid Build Coastguard Worker     void upload(void);
253*35238bceSAndroid Build Coastguard Worker 
getRefTexture(void)254*35238bceSAndroid Build Coastguard Worker     tcu::Texture1DArray &getRefTexture(void)
255*35238bceSAndroid Build Coastguard Worker     {
256*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
257*35238bceSAndroid Build Coastguard Worker     }
getRefTexture(void) const258*35238bceSAndroid Build Coastguard Worker     const tcu::Texture1DArray &getRefTexture(void) const
259*35238bceSAndroid Build Coastguard Worker     {
260*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
261*35238bceSAndroid Build Coastguard Worker     }
getGLTexture(void) const262*35238bceSAndroid Build Coastguard Worker     uint32_t getGLTexture(void) const
263*35238bceSAndroid Build Coastguard Worker     {
264*35238bceSAndroid Build Coastguard Worker         return m_glTexture;
265*35238bceSAndroid Build Coastguard Worker     }
266*35238bceSAndroid Build Coastguard Worker 
267*35238bceSAndroid Build Coastguard Worker private:
268*35238bceSAndroid Build Coastguard Worker     Texture1DArray(const Texture1DArray &other);            // Not allowed!
269*35238bceSAndroid Build Coastguard Worker     Texture1DArray &operator=(const Texture1DArray &other); // Not allowed!
270*35238bceSAndroid Build Coastguard Worker 
271*35238bceSAndroid Build Coastguard Worker     const RenderContext &m_context;
272*35238bceSAndroid Build Coastguard Worker 
273*35238bceSAndroid Build Coastguard Worker     uint32_t m_format; //!< Internal format.
274*35238bceSAndroid Build Coastguard Worker 
275*35238bceSAndroid Build Coastguard Worker     tcu::Texture1DArray m_refTexture;
276*35238bceSAndroid Build Coastguard Worker     uint32_t m_glTexture;
277*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
278*35238bceSAndroid Build Coastguard Worker 
279*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
280*35238bceSAndroid Build Coastguard Worker  * \brief 3D Texture
281*35238bceSAndroid Build Coastguard Worker  * \note Not supported on OpenGL ES 2
282*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
283*35238bceSAndroid Build Coastguard Worker class Texture3D
284*35238bceSAndroid Build Coastguard Worker {
285*35238bceSAndroid Build Coastguard Worker public:
286*35238bceSAndroid Build Coastguard Worker     Texture3D(const RenderContext &context, uint32_t format, uint32_t dataType, int width, int height, int depth);
287*35238bceSAndroid Build Coastguard Worker     Texture3D(const RenderContext &context, uint32_t internalFormat, int width, int height, int depth);
288*35238bceSAndroid Build Coastguard Worker     Texture3D(const RenderContext &context, const ContextInfo &contextInfo, int numLevels,
289*35238bceSAndroid Build Coastguard Worker               const tcu::CompressedTexture *levels,
290*35238bceSAndroid Build Coastguard Worker               const tcu::TexDecompressionParams &decompressionParams = tcu::TexDecompressionParams());
291*35238bceSAndroid Build Coastguard Worker     ~Texture3D(void);
292*35238bceSAndroid Build Coastguard Worker 
293*35238bceSAndroid Build Coastguard Worker     void upload(void);
294*35238bceSAndroid Build Coastguard Worker 
getRefTexture(void)295*35238bceSAndroid Build Coastguard Worker     tcu::Texture3D &getRefTexture(void)
296*35238bceSAndroid Build Coastguard Worker     {
297*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
298*35238bceSAndroid Build Coastguard Worker     }
getRefTexture(void) const299*35238bceSAndroid Build Coastguard Worker     const tcu::Texture3D &getRefTexture(void) const
300*35238bceSAndroid Build Coastguard Worker     {
301*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
302*35238bceSAndroid Build Coastguard Worker     }
getGLTexture(void) const303*35238bceSAndroid Build Coastguard Worker     uint32_t getGLTexture(void) const
304*35238bceSAndroid Build Coastguard Worker     {
305*35238bceSAndroid Build Coastguard Worker         return m_glTexture;
306*35238bceSAndroid Build Coastguard Worker     }
307*35238bceSAndroid Build Coastguard Worker 
308*35238bceSAndroid Build Coastguard Worker private:
309*35238bceSAndroid Build Coastguard Worker     Texture3D(const Texture3D &other);            // Not allowed!
310*35238bceSAndroid Build Coastguard Worker     Texture3D &operator=(const Texture3D &other); // Not allowed!
311*35238bceSAndroid Build Coastguard Worker 
312*35238bceSAndroid Build Coastguard Worker     void loadCompressed(int numLevels, const tcu::CompressedTexture *levels,
313*35238bceSAndroid Build Coastguard Worker                         const tcu::TexDecompressionParams &decompressionParams);
314*35238bceSAndroid Build Coastguard Worker 
315*35238bceSAndroid Build Coastguard Worker     const RenderContext &m_context;
316*35238bceSAndroid Build Coastguard Worker 
317*35238bceSAndroid Build Coastguard Worker     bool m_isCompressed;
318*35238bceSAndroid Build Coastguard Worker     uint32_t m_format; //!< Internal format.
319*35238bceSAndroid Build Coastguard Worker 
320*35238bceSAndroid Build Coastguard Worker     tcu::Texture3D m_refTexture;
321*35238bceSAndroid Build Coastguard Worker     uint32_t m_glTexture;
322*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
323*35238bceSAndroid Build Coastguard Worker 
324*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
325*35238bceSAndroid Build Coastguard Worker  * \brief Cube Map Array Texture
326*35238bceSAndroid Build Coastguard Worker  * \note Not supported on OpenGL ES 3.0 or lower
327*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
328*35238bceSAndroid Build Coastguard Worker class TextureCubeArray
329*35238bceSAndroid Build Coastguard Worker {
330*35238bceSAndroid Build Coastguard Worker public:
331*35238bceSAndroid Build Coastguard Worker     TextureCubeArray(const RenderContext &context, uint32_t format, uint32_t dataType, int size, int numLayers);
332*35238bceSAndroid Build Coastguard Worker     TextureCubeArray(const RenderContext &context, uint32_t internalFormat, int size, int numLayers);
333*35238bceSAndroid Build Coastguard Worker 
334*35238bceSAndroid Build Coastguard Worker     ~TextureCubeArray(void);
335*35238bceSAndroid Build Coastguard Worker 
336*35238bceSAndroid Build Coastguard Worker     void upload(void);
337*35238bceSAndroid Build Coastguard Worker 
getRefTexture(void)338*35238bceSAndroid Build Coastguard Worker     tcu::TextureCubeArray &getRefTexture(void)
339*35238bceSAndroid Build Coastguard Worker     {
340*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
341*35238bceSAndroid Build Coastguard Worker     }
getRefTexture(void) const342*35238bceSAndroid Build Coastguard Worker     const tcu::TextureCubeArray &getRefTexture(void) const
343*35238bceSAndroid Build Coastguard Worker     {
344*35238bceSAndroid Build Coastguard Worker         return m_refTexture;
345*35238bceSAndroid Build Coastguard Worker     }
getGLTexture(void) const346*35238bceSAndroid Build Coastguard Worker     uint32_t getGLTexture(void) const
347*35238bceSAndroid Build Coastguard Worker     {
348*35238bceSAndroid Build Coastguard Worker         return m_glTexture;
349*35238bceSAndroid Build Coastguard Worker     }
350*35238bceSAndroid Build Coastguard Worker 
351*35238bceSAndroid Build Coastguard Worker private:
352*35238bceSAndroid Build Coastguard Worker     TextureCubeArray(const TextureCubeArray &other);            // Not allowed!
353*35238bceSAndroid Build Coastguard Worker     TextureCubeArray &operator=(const TextureCubeArray &other); // Not allowed!
354*35238bceSAndroid Build Coastguard Worker 
355*35238bceSAndroid Build Coastguard Worker     const RenderContext &m_context;
356*35238bceSAndroid Build Coastguard Worker 
357*35238bceSAndroid Build Coastguard Worker     bool m_isCompressed;
358*35238bceSAndroid Build Coastguard Worker     uint32_t m_format; //!< Internal format.
359*35238bceSAndroid Build Coastguard Worker 
360*35238bceSAndroid Build Coastguard Worker     tcu::TextureCubeArray m_refTexture;
361*35238bceSAndroid Build Coastguard Worker     uint32_t m_glTexture;
362*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
363*35238bceSAndroid Build Coastguard Worker 
364*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
365*35238bceSAndroid Build Coastguard Worker  * \brief 1D Texture Buffer only supported on OpenGL
366*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
367*35238bceSAndroid Build Coastguard Worker class TextureBuffer
368*35238bceSAndroid Build Coastguard Worker {
369*35238bceSAndroid Build Coastguard Worker public:
370*35238bceSAndroid Build Coastguard Worker     TextureBuffer(const RenderContext &context, uint32_t internalFormat, size_t bufferSize);
371*35238bceSAndroid Build Coastguard Worker     TextureBuffer(const RenderContext &context, uint32_t internalFormat, size_t bufferSize, size_t offset, size_t size,
372*35238bceSAndroid Build Coastguard Worker                   const void *data = DE_NULL);
373*35238bceSAndroid Build Coastguard Worker 
374*35238bceSAndroid Build Coastguard Worker     ~TextureBuffer(void);
375*35238bceSAndroid Build Coastguard Worker 
376*35238bceSAndroid Build Coastguard Worker     // \note Effective pixel buffer access must be limited to w <= GL_MAX_TEXTURE_BUFFER_SIZE
377*35238bceSAndroid Build Coastguard Worker     const tcu::PixelBufferAccess getFullRefTexture(void);
378*35238bceSAndroid Build Coastguard Worker     const tcu::ConstPixelBufferAccess getFullRefTexture(void) const;
379*35238bceSAndroid Build Coastguard Worker 
380*35238bceSAndroid Build Coastguard Worker     // \note mutating buffer storage will invalidate existing pixel buffer accesses
getRefBuffer(void)381*35238bceSAndroid Build Coastguard Worker     de::ArrayBuffer<uint8_t> &getRefBuffer(void)
382*35238bceSAndroid Build Coastguard Worker     {
383*35238bceSAndroid Build Coastguard Worker         return m_refBuffer;
384*35238bceSAndroid Build Coastguard Worker     }
getRefBuffer(void) const385*35238bceSAndroid Build Coastguard Worker     const de::ArrayBuffer<uint8_t> &getRefBuffer(void) const
386*35238bceSAndroid Build Coastguard Worker     {
387*35238bceSAndroid Build Coastguard Worker         return m_refBuffer;
388*35238bceSAndroid Build Coastguard Worker     }
389*35238bceSAndroid Build Coastguard Worker 
getSize(void) const390*35238bceSAndroid Build Coastguard Worker     size_t getSize(void) const
391*35238bceSAndroid Build Coastguard Worker     {
392*35238bceSAndroid Build Coastguard Worker         return m_size;
393*35238bceSAndroid Build Coastguard Worker     }
getOffset(void) const394*35238bceSAndroid Build Coastguard Worker     size_t getOffset(void) const
395*35238bceSAndroid Build Coastguard Worker     {
396*35238bceSAndroid Build Coastguard Worker         return m_offset;
397*35238bceSAndroid Build Coastguard Worker     }
getBufferSize(void) const398*35238bceSAndroid Build Coastguard Worker     size_t getBufferSize(void) const
399*35238bceSAndroid Build Coastguard Worker     {
400*35238bceSAndroid Build Coastguard Worker         return m_refBuffer.size();
401*35238bceSAndroid Build Coastguard Worker     }
402*35238bceSAndroid Build Coastguard Worker 
getGLTexture(void) const403*35238bceSAndroid Build Coastguard Worker     uint32_t getGLTexture(void) const
404*35238bceSAndroid Build Coastguard Worker     {
405*35238bceSAndroid Build Coastguard Worker         return m_glTexture;
406*35238bceSAndroid Build Coastguard Worker     }
getGLBuffer(void) const407*35238bceSAndroid Build Coastguard Worker     uint32_t getGLBuffer(void) const
408*35238bceSAndroid Build Coastguard Worker     {
409*35238bceSAndroid Build Coastguard Worker         return m_glBuffer;
410*35238bceSAndroid Build Coastguard Worker     }
411*35238bceSAndroid Build Coastguard Worker 
412*35238bceSAndroid Build Coastguard Worker     void upload(void);
413*35238bceSAndroid Build Coastguard Worker 
414*35238bceSAndroid Build Coastguard Worker private:
415*35238bceSAndroid Build Coastguard Worker     void init(uint32_t internalFormat, size_t bufferSize, size_t offset, size_t size, const void *data);
416*35238bceSAndroid Build Coastguard Worker     TextureBuffer(const TextureBuffer &other);            // Not allowed!
417*35238bceSAndroid Build Coastguard Worker     TextureBuffer &operator=(const TextureBuffer &other); // Not allowed!
418*35238bceSAndroid Build Coastguard Worker 
419*35238bceSAndroid Build Coastguard Worker     const RenderContext &m_context;
420*35238bceSAndroid Build Coastguard Worker     uint32_t m_format; //!< Internal format.
421*35238bceSAndroid Build Coastguard Worker     de::ArrayBuffer<uint8_t> m_refBuffer;
422*35238bceSAndroid Build Coastguard Worker     size_t m_offset;
423*35238bceSAndroid Build Coastguard Worker     size_t m_size;
424*35238bceSAndroid Build Coastguard Worker 
425*35238bceSAndroid Build Coastguard Worker     uint32_t m_glTexture;
426*35238bceSAndroid Build Coastguard Worker     uint32_t m_glBuffer;
427*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
428*35238bceSAndroid Build Coastguard Worker 
429*35238bceSAndroid Build Coastguard Worker } // namespace glu
430*35238bceSAndroid Build Coastguard Worker 
431*35238bceSAndroid Build Coastguard Worker #endif // _GLUTEXTURE_HPP
432