globjects  2.0.0.630135941c42
Strict OpenGL objects wrapper.
Loading...
Searching...
No Matches
Texture.h
Go to the documentation of this file.
1
2#pragma once
3
4
5#include <glbinding/gl/types.h>
6
7#include <array>
8#include <vector>
9
10#include <glm/fwd.hpp>
11
12#include <globjects/globjects_api.h>
13#include <globjects/Object.h>
15
16
17namespace globjects
18{
19
20
21class Buffer;
22class TextureHandle;
23class Sampler;
24
25
34class GLOBJECTS_API Texture : public Object, public Instantiator<Texture>
35{
36public:
38 {
39 Legacy,
40 DirectStateAccessEXT,
41 DirectStateAccessARB
42 };
43
45 {
46 Fallback,
47 Legacy,
48 DirectStateAccessEXT,
49 DirectStateAccessARB
50 };
51
53 {
54 Fallback,
55 Legacy,
56 DirectStateAccessEXT,
57 DirectStateAccessARB
58 };
59
62
64 Texture(gl::GLenum target);
65
66 virtual ~Texture();
67
68 static std::unique_ptr<Texture> fromId(gl::GLuint id, gl::GLenum target);
69
70 static std::unique_ptr<Texture> createDefault();
71 static std::unique_ptr<Texture> createDefault(gl::GLenum target);
72
73 void bind() const;
74 void unbind() const;
75 static void unbind(gl::GLenum target);
76
77 void bindActive(gl::GLenum texture) const;
78 void bindActive(unsigned int index) const;
79 void unbindActive(gl::GLenum texture) const;
80 void unbindActive(unsigned int index) const;
81
82 void setParameter(gl::GLenum name, gl::GLenum value);
83 void setParameter(gl::GLenum name, gl::GLint value);
84 void setParameter(gl::GLenum name, gl::GLfloat value);
85 void setParameter(gl::GLenum name, const glm::vec4 & value);
86
87 gl::GLint getParameter(gl::GLenum pname) const;
88 gl::GLint getLevelParameter(gl::GLint level, gl::GLenum pname) const;
89
90 void getImage(gl::GLint level, gl::GLenum format, gl::GLenum type, gl::GLvoid * image) const;
91 std::vector<unsigned char> getImage(gl::GLint level, gl::GLenum format, gl::GLenum type) const;
92
93 void getCompressedImage(gl::GLint lod, gl::GLvoid * image) const;
94 std::vector<unsigned char> getCompressedImage(gl::GLint lod = 0) const;
95
96 gl::GLenum target() const;
97
98 void image1D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
99 void compressedImage1D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
100 void subImage1D(gl::GLint level, gl::GLint xOffset, gl::GLsizei width, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
101
102 void image2D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
103 void image2D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 & size, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
104 void compressedImage2D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
105 void compressedImage2D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 & size, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
106 void subImage2D(gl::GLint level, gl::GLint xOffset, gl::GLint yOffset, gl::GLsizei width, gl::GLsizei height, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
107 void subImage2D(gl::GLint level, const glm::ivec2& offset, const glm::ivec2& size, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
108
109 void image3D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
110 void image3D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec3 & size, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
111 void compressedImage3D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
112 void compressedImage3D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec3 & size, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
113 void subImage3D(gl::GLint level, gl::GLint xOffset, gl::GLint yOffset, gl::GLint zOffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
114 void subImage3D(gl::GLint level, const glm::ivec3& offset, const glm::ivec3& size, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
115
116 void image2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLboolean fixedSamplesLocations);
117 void image2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec2 & size, gl::GLboolean fixedSamplesLocations);
118 void image3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLboolean fixedSamplesLocations);
119 void image3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec3 & size, gl::GLboolean fixedSamplesLocations);
120
121 void storage1D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width);
122 void storage2D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height);
123 void storage2D(gl::GLsizei levels, gl::GLenum internalFormat, const glm::ivec2 & size);
124 void storage3D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth);
125 void storage3D(gl::GLsizei levels, gl::GLenum internalFormat, const glm::ivec3 & size);
126
127 void storage2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLboolean fixedSamplesLocations);
128 void storage2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec2 & size, gl::GLboolean fixedSamplesLocations);
129 void storage3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLboolean fixedSamplesLocations);
130 void storage3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec3 & size, gl::GLboolean fixedSamplesLocations);
131
132 void textureView(gl::GLuint originalTexture, gl::GLenum internalFormat, gl::GLuint minLevel, gl::GLuint numLevels, gl::GLuint minLayer, gl::GLuint numLayers);
133
134 void texBuffer(gl::GLenum internalFormat, Buffer * buffer);
135 void texBufferRange(gl::GLenum internalFormat, Buffer * buffer, gl::GLintptr offset, gl::GLsizeiptr size);
136
137 void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const void * data);
138 void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::vec4 & value);
139 void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::ivec4 & value);
140 void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::uvec4 & value);
141
142 void clearSubImage(gl::GLint level, gl::GLint xOffset, gl::GLint yOffset, gl::GLint zOffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLenum format, gl::GLenum type, const void * data);
143 void clearSubImage(gl::GLint level, const glm::ivec3 & offset, const glm::ivec3 & size, gl::GLenum format, gl::GLenum type, const void * data);
144 void clearSubImage(gl::GLint level, const glm::ivec3 & offset, const glm::ivec3 & size, gl::GLenum format, gl::GLenum type, const glm::vec4 & value);
145 void clearSubImage(gl::GLint level, const glm::ivec3 & offset, const glm::ivec3 & size, gl::GLenum format, gl::GLenum type, const glm::ivec4 & value);
146 void clearSubImage(gl::GLint level, const glm::ivec3 & offset, const glm::ivec3 & size, gl::GLenum format, gl::GLenum type, const glm::uvec4 & value);
147
148 void invalidateImage(gl::GLint level) const;
149 void invalidateSubImage(gl::GLint level, gl::GLint xoffset, gl::GLint yoffset, gl::GLint zoffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth);
150 void invalidateSubImage(gl::GLint level, const glm::ivec3& offset, const glm::ivec3 size);
151
152 void bindImageTexture(gl::GLuint unit, gl::GLint level, gl::GLboolean layered, gl::GLint layer, gl::GLenum access, gl::GLenum format) const;
153 static void unbindImageTexture(gl::GLuint unit);
154
156
160 void cubeMapImage(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
161
165 void cubeMapImage(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 & size, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
166
177 void cubeMapImage(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLenum format, gl::GLenum type, const std::array<const gl::GLvoid *, 6> & data);
178
189 void cubeMapImage(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 & size, gl::GLint border, gl::GLenum format, gl::GLenum type, const std::array<const gl::GLvoid *, 6> & data);
190
193
194 void pageCommitment(gl::GLint level, gl::GLint xOffset, gl::GLint yOffset, gl::GLint zOffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLboolean commit) const;
195 void pageCommitment(gl::GLint level, const glm::ivec3& offset, const glm::ivec3& size, gl::GLboolean commit) const;
196
197 virtual gl::GLenum objectType() const override;
198
199
200protected:
201 Texture(std::unique_ptr<IDResource> && resource, gl::GLenum target);
202
203
204protected:
205 gl::GLenum m_target;
206};
207
208
209} // namespace globjects
Wrapper for OpenGL buffer objects.
Definition Buffer.h:38
CRTP for creating objects similar to std::make_unique.
Definition Instantiator.h:22
Superclass of all wrapped OpenGL objects.
Definition Object.h:28
Wraps OpenGL sampler objects.
Definition Sampler.h:23
Definition TextureHandle.h:21
Wraps OpenGL texture objects. A Texture provides both interfaces to bind them for the OpenGL pipeline...
Definition Texture.h:35
void unbindActive(unsigned int index) const
void storage3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec3 &size, gl::GLboolean fixedSamplesLocations)
virtual gl::GLenum objectType() const override
void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::vec4 &value)
Texture(gl::GLenum target)
StorageImplementation
Definition Texture.h:45
static void unbindImageTexture(gl::GLuint unit)
void bind() const
void bindActive(unsigned int index) const
BindlessImplementation
Definition Texture.h:38
void invalidateSubImage(gl::GLint level, gl::GLint xoffset, gl::GLint yoffset, gl::GLint zoffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth)
void clearSubImage(gl::GLint level, const glm::ivec3 &offset, const glm::ivec3 &size, gl::GLenum format, gl::GLenum type, const glm::uvec4 &value)
void setParameter(gl::GLenum name, gl::GLfloat value)
void compressedImage1D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid *data)
void subImage1D(gl::GLint level, gl::GLint xOffset, gl::GLsizei width, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
void image3D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec3 &size, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
gl::GLenum target() const
std::vector< unsigned char > getCompressedImage(gl::GLint lod=0) const
void compressedImage2D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid *data)
void image2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLboolean fixedSamplesLocations)
void texBuffer(gl::GLenum internalFormat, Buffer *buffer)
void storage2D(gl::GLsizei levels, gl::GLenum internalFormat, const glm::ivec2 &size)
void setParameter(gl::GLenum name, gl::GLenum value)
static void unbind(gl::GLenum target)
void invalidateSubImage(gl::GLint level, const glm::ivec3 &offset, const glm::ivec3 size)
void clearSubImage(gl::GLint level, gl::GLint xOffset, gl::GLint yOffset, gl::GLint zOffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLenum format, gl::GLenum type, const void *data)
void image2D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 &size, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
void clearSubImage(gl::GLint level, const glm::ivec3 &offset, const glm::ivec3 &size, gl::GLenum format, gl::GLenum type, const glm::vec4 &value)
void bindImageTexture(gl::GLuint unit, gl::GLint level, gl::GLboolean layered, gl::GLint layer, gl::GLenum access, gl::GLenum format) const
void image3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec3 &size, gl::GLboolean fixedSamplesLocations)
gl::GLint getLevelParameter(gl::GLint level, gl::GLenum pname) const
void cubeMapImage(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLenum format, gl::GLenum type, const std::array< const gl::GLvoid *, 6 > &data)
void storage2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec2 &size, gl::GLboolean fixedSamplesLocations)
void image2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec2 &size, gl::GLboolean fixedSamplesLocations)
void storage2D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height)
void clearSubImage(gl::GLint level, const glm::ivec3 &offset, const glm::ivec3 &size, gl::GLenum format, gl::GLenum type, const glm::ivec4 &value)
void unbindActive(gl::GLenum texture) const
void subImage2D(gl::GLint level, const glm::ivec2 &offset, const glm::ivec2 &size, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
static std::unique_ptr< Texture > createDefault()
void subImage3D(gl::GLint level, const glm::ivec3 &offset, const glm::ivec3 &size, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
void cubeMapImage(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
void image3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLboolean fixedSamplesLocations)
void textureView(gl::GLuint originalTexture, gl::GLenum internalFormat, gl::GLuint minLevel, gl::GLuint numLevels, gl::GLuint minLayer, gl::GLuint numLayers)
Texture(std::unique_ptr< IDResource > &&resource, gl::GLenum target)
void compressedImage3D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec3 &size, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid *data)
gl::GLint getParameter(gl::GLenum pname) const
static void hintBindlessImplementation(BindlessImplementation impl)
void unbind() const
void storage1D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width)
void cubeMapImage(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 &size, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
static std::unique_ptr< Texture > createDefault(gl::GLenum target)
void invalidateImage(gl::GLint level) const
void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::ivec4 &value)
void bindActive(gl::GLenum texture) const
void setParameter(gl::GLenum name, const glm::vec4 &value)
void subImage3D(gl::GLint level, gl::GLint xOffset, gl::GLint yOffset, gl::GLint zOffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
void pageCommitment(gl::GLint level, gl::GLint xOffset, gl::GLint yOffset, gl::GLint zOffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLboolean commit) const
static std::unique_ptr< Texture > fromId(gl::GLuint id, gl::GLenum target)
void clearSubImage(gl::GLint level, const glm::ivec3 &offset, const glm::ivec3 &size, gl::GLenum format, gl::GLenum type, const void *data)
void texBufferRange(gl::GLenum internalFormat, Buffer *buffer, gl::GLintptr offset, gl::GLsizeiptr size)
void storage3D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth)
void storage3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLboolean fixedSamplesLocations)
void storage2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLboolean fixedSamplesLocations)
TextureHandle textureHandle(Sampler *sampler) const
void subImage2D(gl::GLint level, gl::GLint xOffset, gl::GLint yOffset, gl::GLsizei width, gl::GLsizei height, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
TextureHandle textureHandle() const
void compressedImage2D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 &size, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid *data)
void cubeMapImage(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 &size, gl::GLint border, gl::GLenum format, gl::GLenum type, const std::array< const gl::GLvoid *, 6 > &data)
void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const void *data)
void image1D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
void getImage(gl::GLint level, gl::GLenum format, gl::GLenum type, gl::GLvoid *image) const
std::vector< unsigned char > getImage(gl::GLint level, gl::GLenum format, gl::GLenum type) const
void pageCommitment(gl::GLint level, const glm::ivec3 &offset, const glm::ivec3 &size, gl::GLboolean commit) const
void setParameter(gl::GLenum name, gl::GLint value)
static void hintStorageImplementation(StorageImplementation impl)
void image2D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::uvec4 &value)
void image3D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid *data)
void getCompressedImage(gl::GLint lod, gl::GLvoid *image) const
void compressedImage3D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid *data)
void storage3D(gl::GLsizei levels, gl::GLenum internalFormat, const glm::ivec3 &size)
StorageMultisampleImplementation
Definition Texture.h:53
gl::GLenum m_target
Definition Texture.h:205
Contains all the classes that wrap OpenGL functionality.