Pioneer
Texture.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _TEXTURE_H
5 #define _TEXTURE_H
6 
7 #include "RefCounted.h"
8 #include "vector2.h"
9 #include "vector3.h"
10 #include <vector>
11 
12 namespace Graphics {
13 
16 
19 
20  //luminance/intensity formats are deprecated in opengl 3+
21  //so we might remove them someday
22  TEXTURE_LUMINANCE_ALPHA_88, //luminance value put into R,G,B components; separate alpha value
23  TEXTURE_INTENSITY_8, //intensity value put into RGBA components
24 
25  TEXTURE_DXT1, // data is expected to be pre-compressed
27 
28  TEXTURE_DEPTH //precision chosen by renderer
29  };
30 
36  };
37 
38  enum TextureType {
42  };
43 
44  struct TextureCubeData {
45  void *posX;
46  void *negX;
47  void *posY;
48  void *negY;
49  void *posZ;
50  void *negZ;
51  };
52 
53  // WARNING: TextureDescriptor is intended to be immutable. Internal values should not be changed!
55  public:
58  dataSize(1.0f),
59  texSize(1.0f),
61  generateMipmaps(false),
62  allowCompression(true),
64  numberOfMipMaps(0),
66  {}
67 
68  TextureDescriptor(TextureFormat _format, const vector3f &_dataSize, TextureSampleMode _sampleMode, bool _generateMipmaps, bool _allowCompression, bool _useAnisotropicFiltering, unsigned int _numberOfMipMaps, TextureType _textureType) :
69  format(_format),
70  dataSize(_dataSize),
71  texSize(1.0f),
72  sampleMode(_sampleMode),
73  generateMipmaps(_generateMipmaps),
74  allowCompression(_allowCompression),
75  useAnisotropicFiltering(_useAnisotropicFiltering),
76  numberOfMipMaps(_numberOfMipMaps),
77  type(_textureType)
78  {}
79 
80  TextureDescriptor(TextureFormat _format, const vector3f &_dataSize, const vector2f &_texSize, TextureSampleMode _sampleMode, bool _generateMipmaps, bool _allowCompression, bool _useAnisotropicFiltering, unsigned int _numberOfMipMaps, TextureType _textureType) :
81  format(_format),
82  dataSize(_dataSize),
83  texSize(_texSize),
84  sampleMode(_sampleMode),
85  generateMipmaps(_generateMipmaps),
86  allowCompression(_allowCompression),
87  useAnisotropicFiltering(_useAnisotropicFiltering),
88  numberOfMipMaps(_numberOfMipMaps),
89  type(_textureType)
90  {}
91 
93 
94  // WARNING: these values shall not be changed
102  unsigned int numberOfMipMaps;
104  };
105 
106  class Texture : public RefCounted {
107  public:
108  const TextureDescriptor &GetDescriptor() const { return m_descriptor; }
109 
110  virtual void Update(const void *data, const vector2f &pos, const vector3f &dataSize, TextureFormat format, const unsigned int numMips = 0) = 0;
111  virtual void Update(const void *data, const vector3f &dataSize, TextureFormat format, const unsigned int numMips = 0)
112  {
113  Update(data, vector2f(0, 0), dataSize, format, numMips);
114  }
115  virtual void Update(const TextureCubeData &data, const vector3f &dataSize, TextureFormat format, const unsigned int numMips = 0) = 0;
116  typedef std::vector<void *> vecDataPtr;
117  virtual void Update(const vecDataPtr &data, const vector3f &dataSize, const TextureFormat format, const unsigned int numMips = 0) = 0;
118  virtual void SetSampleMode(TextureSampleMode) = 0;
119  // Call this function to update the texture's mipmaps.
120  // validMips is the number of mipmaps which already have valid data uploaded, and is mostly for internal use.
121  virtual void BuildMipmaps(const uint32_t validMips = 1) = 0;
122  virtual uint32_t GetTextureID() const = 0;
123  virtual uint32_t GetTextureMemSize() const = 0;
124 
125  virtual void Bind() = 0;
126  virtual void Unbind() = 0;
127 
128  virtual ~Texture() {}
129 
130  protected:
131  Texture(const TextureDescriptor &descriptor) :
132  m_descriptor(descriptor) {}
133 
134  private:
135  TextureDescriptor m_descriptor;
136  };
137 
138 } // namespace Graphics
139 
140 #endif
Definition: Texture.h:54
TextureDescriptor(TextureFormat _format, const vector3f &_dataSize, const vector2f &_texSize, TextureSampleMode _sampleMode, bool _generateMipmaps, bool _allowCompression, bool _useAnisotropicFiltering, unsigned int _numberOfMipMaps, TextureType _textureType)
Definition: Texture.h:80
bool allowCompression
Definition: Texture.h:100
vector2f texSize
Definition: Texture.h:97
bool generateMipmaps
Definition: Texture.h:99
TextureType type
Definition: Texture.h:103
unsigned int numberOfMipMaps
Definition: Texture.h:102
TextureFormat format
Definition: Texture.h:95
TextureDescriptor(TextureFormat _format, const vector3f &_dataSize, TextureSampleMode _sampleMode, bool _generateMipmaps, bool _allowCompression, bool _useAnisotropicFiltering, unsigned int _numberOfMipMaps, TextureType _textureType)
Definition: Texture.h:68
TextureSampleMode sampleMode
Definition: Texture.h:98
bool useAnisotropicFiltering
Definition: Texture.h:101
TextureDescriptor()
Definition: Texture.h:56
vector3f dataSize
Definition: Texture.h:96
vector2f GetOriginalSize() const
Definition: Texture.h:92
Definition: Texture.h:106
virtual void SetSampleMode(TextureSampleMode)=0
virtual void Unbind()=0
virtual uint32_t GetTextureMemSize() const =0
const TextureDescriptor & GetDescriptor() const
Definition: Texture.h:108
virtual ~Texture()
Definition: Texture.h:128
std::vector< void * > vecDataPtr
Definition: Texture.h:116
virtual void Update(const void *data, const vector2f &pos, const vector3f &dataSize, TextureFormat format, const unsigned int numMips=0)=0
virtual void Bind()=0
virtual uint32_t GetTextureID() const =0
virtual void Update(const void *data, const vector3f &dataSize, TextureFormat format, const unsigned int numMips=0)
Definition: Texture.h:111
Texture(const TextureDescriptor &descriptor)
Definition: Texture.h:131
virtual void BuildMipmaps(const uint32_t validMips=1)=0
virtual void Update(const TextureCubeData &data, const vector3f &dataSize, TextureFormat format, const unsigned int numMips=0)=0
virtual void Update(const vecDataPtr &data, const vector3f &dataSize, const TextureFormat format, const unsigned int numMips=0)=0
Definition: RefCounted.h:11
T y
Definition: vector2.h:26
T x
Definition: vector2.h:26
T y
Definition: vector3.h:18
T x
Definition: vector3.h:18
Definition: Background.h:14
TextureFormat
Definition: Texture.h:14
@ TEXTURE_RGB_888
Definition: Texture.h:18
@ TEXTURE_DXT1
Definition: Texture.h:25
@ TEXTURE_DXT5
Definition: Texture.h:26
@ TEXTURE_NONE
Definition: Texture.h:15
@ TEXTURE_LUMINANCE_ALPHA_88
Definition: Texture.h:22
@ TEXTURE_DEPTH
Definition: Texture.h:28
@ TEXTURE_RGBA_8888
Definition: Texture.h:17
@ TEXTURE_INTENSITY_8
Definition: Texture.h:23
TextureType
Definition: Texture.h:38
@ TEXTURE_2D
Definition: Texture.h:39
@ TEXTURE_CUBE_MAP
Definition: Texture.h:40
@ TEXTURE_2D_ARRAY
Definition: Texture.h:41
TextureSampleMode
Definition: Texture.h:31
@ NEAREST_REPEAT
Definition: Texture.h:35
@ NEAREST_CLAMP
Definition: Texture.h:33
@ LINEAR_CLAMP
Definition: Texture.h:32
@ LINEAR_REPEAT
Definition: Texture.h:34
Definition: Texture.h:44
void * negY
Definition: Texture.h:48
void * negZ
Definition: Texture.h:50
void * posX
Definition: Texture.h:45
void * posZ
Definition: Texture.h:49
void * negX
Definition: Texture.h:46
void * posY
Definition: Texture.h:47
vector2< float > vector2f
Definition: vector2.h:133