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