-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGLTexture.cpp
More file actions
203 lines (182 loc) · 6.35 KB
/
Copy pathGLTexture.cpp
File metadata and controls
203 lines (182 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
//
// Created by Y500 on 07.03.2017.
//
#include <sstream>
#include "GLTexture.h"
std::string GLTEXTURE_INFO::toString()
{
std::stringstream stringStream;
stringStream << "Texture info:\n"
<< "\tHandle:" << handle
<< "\n\tType:";
switch (type)
{
case GL_TEXTURE_1D:
stringStream << "One dimensional texture\n";
break;
case GL_TEXTURE_2D:
stringStream << "Two dimensional texture\n";
break;
case GL_TEXTURE_3D:
stringStream << "Three dimensional texture\n";
break;
case GL_TEXTURE_1D_ARRAY:
stringStream << "Array of one dimensional textures\n";
break;
case GL_TEXTURE_2D_ARRAY:
stringStream << "Array of two dimensional textures\n";
break;
case GL_TEXTURE_RECTANGLE:
stringStream << "Rectangle texture\n";
break;
case GL_TEXTURE_CUBE_MAP:
stringStream << "Cube map texture\n";
break;
case GL_TEXTURE_CUBE_MAP_ARRAY:
stringStream << "Array of cube map textures\n";
break;
case GL_TEXTURE_BUFFER:
stringStream << "Texture buffer\n";
break;
case GL_TEXTURE_2D_MULTISAMPLE:
stringStream << "Two dimensional texture multisample\n";
break;
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
stringStream << "Array of two dimensional texture multisample\n";
break;
default:
stringStream << "Undefined\n";
}
stringStream << "\tWidth:" << width
<< "\n\tHeight:" << height
<< "\n\tDepth:" << depth
<< "\n\tInternal format:" << internalFormat
<< "\n\tFormat:" << format
<< "\n\tValue type:" << valueType
<< "\n\tImage unit:" << imageUnit
<< "\n\tAccess:";
switch (access)
{
case GL_READ_ONLY:
stringStream << "Read only\n";
break;
case GL_WRITE_ONLY:
stringStream << "Write only\n";
break;
case GL_READ_WRITE:
stringStream << "Read and write\n";
break;
default:
stringStream << "Undefined\n";
}
stringStream << "\tBound to image unit:" << boundAsImage << std::endl;
return stringStream.str();
}
GLTexture::GLTexture(GLenum type, const std::ostream &inErrorStream) : errorStream(inErrorStream.rdbuf())
{
glGenTextures(1, &texture.handle);
texture.type = type;
}
GLTexture::GLTexture(const GLTexture &origin) : errorStream(origin.errorStream.rdbuf())
{
texture = origin.texture;
}
void GLTexture::setType(GLenum type)
{
glGenTextures(1, &texture.handle);
texture.type = type;
}
void GLTexture::setErrorStream(const std::ostream &inErrorStream)
{
errorStream.rdbuf(inErrorStream.rdbuf());
}
void GLTexture::specifyImage(GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format,
GLenum type, const GLvoid *data)
{
glTexImage1D(texture.type, level, internalFormat, width, border, format, type, data);
texture.internalFormat = internalFormat;
texture.width = width;
texture.format = format;
texture.valueType = type;
}
void GLTexture::specifyImage(GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border,
GLenum format, GLenum type, const GLvoid *data)
{
glTexImage2D(texture.type, level, internalFormat, width, height, border, format, type, data);
texture.internalFormat = internalFormat;
texture.width = width;
texture.height = height;
texture.format = format;
texture.valueType = type;
}
void GLTexture::specifyImage(GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth,
GLint border, GLenum format, GLenum type, const GLvoid *data)
{
glTexImage3D(texture.type, level, internalFormat, width, height, depth, border, format, type, data);
texture.internalFormat = internalFormat;
texture.width = width;
texture.height = height;
texture.depth = depth;
texture.format = format;
texture.valueType = type;
}
void GLTexture::parameter(GLenum pname, GLint param)
{
glTexParameteri(texture.type, pname, param);
}
void GLTexture::parameter(GLenum pname, GLfloat param)
{
glTexParameterf(texture.type, pname, param);
}
void GLTexture::subImage(GLint level, GLint xoffset, GLsizei width, const GLvoid *data)
{
glTexSubImage1D(texture.type, level, xoffset, width, texture.format, texture.type, data);
}
void GLTexture::subImage(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
const GLvoid *data)
{
glTexSubImage2D(texture.type, level, xoffset, yoffset, width, height, texture.format, texture.valueType, data);
}
void GLTexture::subImage(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height,
GLsizei depth, const GLvoid *data)
{
glTexSubImage3D(texture.type, level, xoffset, yoffset, zoffset, width, height, depth, texture.format,
texture.type, data);
}
void GLTexture::bindImageTexture(GLuint unit, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)
{
glBindImageTexture(unit, texture.handle, level, layered, layer, access, format);
texture.imageUnit = unit;
texture.access = access;
texture.boundAsImage = true;
}
void GLTexture::getSubImage(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height,
GLsizei depth, GLsizei bufSize, void *pixels)
{
glGetTextureSubImage(texture.handle, level, xoffset, yoffset, zoffset, width, height, depth, texture.format,
texture.valueType, bufSize, pixels);
}
void GLTexture::bind()
{
glBindTexture(texture.type, texture.handle);
}
void GLTexture::unbind()
{
glBindTexture(texture.type, 0);
}
void GLTexture::deleteTexture()
{
glDeleteTextures(1, &texture.handle);
glBindTexture(texture.type, 0);
GLTEXTURE_INFO empty;
texture = empty;
}
GLTEXTURE_INFO GLTexture::getTextureInfo()
{
return texture;
}
GLTexture& GLTexture::operator=(const GLTexture &rValue)
{
texture = rValue.texture;
errorStream.rdbuf(rValue.errorStream.rdbuf());
}