Pioneer
Loading...
Searching...
No Matches
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
12namespace 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
42 };
43
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),
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;
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
const TextureDescriptor & GetDescriptor() const
Definition Texture.h:108
virtual void Unbind()=0
virtual uint32_t GetTextureMemSize() const =0
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