globjects  1.0.0.000000000000
Strict OpenGL objects wrapper.
Texture.h
Go to the documentation of this file.
1
2#pragma once
3
4#include <glbinding/gl/types.h>
5
6#include <vector>
7
8#include <glm/fwd.hpp>
9
10#include <globjects/globjects_api.h>
11#include <globjects/Object.h>
12
13
14namespace globjects
15{
16
17
18class Buffer;
19class TextureHandle;
20class Sampler;
21
30class GLOBJECTS_API Texture : public Object
31{
32public:
34 {
35 DirectStateAccessARB
36 , DirectStateAccessEXT
37 , Legacy
38 };
39
41 {
42 DirectStateAccessARB
43 , DirectStateAccessEXT
44 , Legacy
45 , Fallback
46 };
47
50
52 Texture(gl::GLenum target);
53 static Texture * fromId(gl::GLuint id, gl::GLenum target);
54
56 static Texture * createDefault(gl::GLenum target);
57
58 virtual void accept(ObjectVisitor & visitor) override;
59
60 void bind() const;
61 void unbind() const;
62 static void unbind(gl::GLenum target);
63
64 void bindActive(gl::GLenum texture) const;
65 void bindActive(unsigned int index) const;
66 void unbindActive(gl::GLenum texture) const;
67 void unbindActive(unsigned int index) const;
68
69 void setParameter(gl::GLenum name, gl::GLenum value);
70 void setParameter(gl::GLenum name, gl::GLint value);
71 void setParameter(gl::GLenum name, gl::GLfloat value);
72 void setParameter(gl::GLenum name, const glm::vec4 & value);
73
74 gl::GLint getParameter(gl::GLenum pname) const;
75 gl::GLint getLevelParameter(gl::GLint level, gl::GLenum pname) const;
76
77 void getImage(gl::GLint level, gl::GLenum format, gl::GLenum type, gl::GLvoid * image) const;
78 std::vector<unsigned char> getImage(gl::GLint level, gl::GLenum format, gl::GLenum type) const;
79
80 void getCompressedImage(gl::GLint lod, gl::GLvoid * image) const;
81 std::vector<unsigned char> getCompressedImage(gl::GLint lod = 0) const;
82
83 gl::GLenum target() const;
84
85 void image1D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLint border, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
86 void compressedImage1D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
87 void subImage1D(gl::GLint level, gl::GLint xOffset, gl::GLsizei width, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
88
89 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);
90 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);
91 void compressedImage2D(gl::GLint level, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
92 void compressedImage2D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec2 & size, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
93 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);
94 void subImage2D(gl::GLint level, const glm::ivec2& offset, const glm::ivec2& size, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
95
96 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);
97 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);
98 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);
99 void compressedImage3D(gl::GLint level, gl::GLenum internalFormat, const glm::ivec3 & size, gl::GLint border, gl::GLsizei imageSize, const gl::GLvoid * data);
100 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);
101 void subImage3D(gl::GLint level, const glm::ivec3& offset, const glm::ivec3& size, gl::GLenum format, gl::GLenum type, const gl::GLvoid * data);
102
103 void image2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLboolean fixedSamplesLocations);
104 void image2DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec2 & size, gl::GLboolean fixedSamplesLocations);
105 void image3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth, gl::GLboolean fixedSamplesLocations);
106 void image3DMultisample(gl::GLsizei samples, gl::GLenum internalFormat, const glm::ivec3 & size, gl::GLboolean fixedSamplesLocations);
107
108 void storage1D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width);
109 void storage2D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height);
110 void storage2D(gl::GLsizei levels, gl::GLenum internalFormat, const glm::ivec2 & size);
111 void storage3D(gl::GLsizei levels, gl::GLenum internalFormat, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth);
112 void storage3D(gl::GLsizei levels, gl::GLenum internalFormat, const glm::ivec3 & size);
113
114 void textureView(gl::GLuint originalTexture, gl::GLenum internalFormat, gl::GLuint minLevel, gl::GLuint numLevels, gl::GLuint minLayer, gl::GLuint numLayers);
115
116 void texBuffer(gl::GLenum internalFormat, Buffer * buffer);
117 void texBufferRange(gl::GLenum internalFormat, Buffer * buffer, gl::GLintptr offset, gl::GLsizeiptr size);
118
119 void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const void * data);
120 void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::vec4 & value);
121 void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::ivec4 & value);
122 void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::uvec4 & value);
123
124 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);
125 void clearSubImage(gl::GLint level, const glm::ivec3 & offset, const glm::ivec3 & size, gl::GLenum format, gl::GLenum type, const void * data);
126 void clearSubImage(gl::GLint level, const glm::ivec3 & offset, const glm::ivec3 & size, gl::GLenum format, gl::GLenum type, const glm::vec4 & value);
127 void clearSubImage(gl::GLint level, const glm::ivec3 & offset, const glm::ivec3 & size, gl::GLenum format, gl::GLenum type, const glm::ivec4 & value);
128 void clearSubImage(gl::GLint level, const glm::ivec3 & offset, const glm::ivec3 & size, gl::GLenum format, gl::GLenum type, const glm::uvec4 & value);
129
130 void invalidateImage(gl::GLint level) const;
131 void invalidateSubImage(gl::GLint level, gl::GLint xoffset, gl::GLint yoffset, gl::GLint zoffset, gl::GLsizei width, gl::GLsizei height, gl::GLsizei depth);
132 void invalidateSubImage(gl::GLint level, const glm::ivec3& offset, const glm::ivec3 size);
133
134 void bindImageTexture(gl::GLuint unit, gl::GLint level, gl::GLboolean layered, gl::GLint layer, gl::GLenum access, gl::GLenum format) const;
135 static void unbindImageTexture(gl::GLuint unit);
136
138
139 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);
140 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);
141
144
145 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;
146 void pageCommitment(gl::GLint level, const glm::ivec3& offset, const glm::ivec3& size, gl::GLboolean commit) const;
147
148 virtual gl::GLenum objectType() const override;
149
150protected:
151 Texture(IDResource * resource, gl::GLenum target);
152 virtual ~Texture();
153
154protected:
155 gl::GLenum m_target;
156};
157
158
159} // namespace globjects
Wrapper for OpenGL buffer objects.
Definition: Buffer.h:36
Superclass of all wrapped OpenGL objects.
Definition: Object.h:27
Implements a Visitor Pattern to iterate over all tracked globjects objects.
Definition: ObjectVisitor.h:30
Wraps OpenGL sampler objects.
Definition: Sampler.h:19
Definition: TextureHandle.h:19
Wraps OpenGL texture objects. A Texture provides both interfaces to bind them for the OpenGL pipeline...
Definition: Texture.h:31
static Texture * fromId(gl::GLuint id, gl::GLenum target)
void unbindActive(unsigned int index) const
virtual gl::GLenum objectType() const override
Texture(IDResource *resource, gl::GLenum target)
void clearImage(gl::GLint level, gl::GLenum format, gl::GLenum type, const glm::vec4 &value)
Texture(gl::GLenum target)
StorageImplementation
Definition: Texture.h:41
static void unbindImageTexture(gl::GLuint unit)
void bind() const
void bindActive(unsigned int index) const
static Texture * createDefault()
BindlessImplementation
Definition: Texture.h:34
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 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)
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)
virtual void accept(ObjectVisitor &visitor) override
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)
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
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)
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)
static Texture * createDefault(gl::GLenum target)
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 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)
gl::GLenum m_target
Definition: Texture.h:155
Contains all the classes that wrap OpenGL functionality.