Repository navigation
Expand file tree
/
Copy pathuniform.cpp
More file actions
105 lines (91 loc) · 2.49 KB
/
Copy pathuniform.cpp
File metadata and controls
105 lines (91 loc) · 2.49 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
#include <GL/glew.h>
#include "uniform.h"
//void UniformMatrix::Set(void * value)
//{
// glUseProgram(this->program);
// glUniformMatrix4fv(this->location, 1, this->transpose, (GLfloat*)value);
// glUseProgram(0);
//}
void UniformMatrix::Set(glm::mat4 & mat)
{
glUseProgram(this->program);
glUniformMatrix4fv(this->location, 1, this->transpose, (GLfloat*)&mat[0][0]);
glUseProgram(0);
//this->Set(&mat[0][0]);
}
//void UniformVec4::Set(void * value)
//{
// glUseProgram(this->program);
// glUniform4fv(this->location, 1, (GLfloat*)value);
// glUseProgram(0);
//}
void UniformVec4::Set(glm::vec4 & vec)
{
glUseProgram(this->program);
glUniform4fv(this->location, 1, &vec[0]);
glUseProgram(0);
}
//void UniformInt::Set(void * value)
//{
// glUseProgram(this->program);
// glUniform1i(this->location, (GLint)value);
// glUseProgram(0);
//}
void UniformInt::Set(int value)
{
glUseProgram(this->program);
glUniform1i(this->location, (GLint)value);
glUseProgram(0);
}
//void UniformIntArray::Set(void * value)
//{
// throw "Unable set array via `Set(void * value)`, use `Set(std::vector<int>& integers)` instead.";
//}
void UniformIntArray::Set(std::vector<int>& integers)
{
glUseProgram(this->program);
glUniform1iv(this->location, integers.size(), &integers[0]);
glUseProgram(0);
}
void UniformSampler2D::Set(TextureUnit unit)
{
return UniformInt::Set((int)(unit - TextureUnit::TEXTURE0));
}
void UniformSampler2D::Set(Texture texture)
{
auto binding = texture->GetBinding();
if (!binding) {
texture->Bind();
}
return UniformInt::Set(texture->GetBinding() - GL_TEXTURE0);
}
void UniformSampler2DArray::Set(std::vector<TextureUnit>& units)
{
auto v = std::vector<int>(units.size(), 0);
auto vi = v.begin();
auto ui = units.begin();
while (vi != v.end())
{
*vi = *ui - TextureUnit::TEXTURE0;
vi++;
ui++;
}
UniformIntArray::Set(v);
/*glUseProgram(this->program);
glUniform1iv(this->location, integers.size(), &integers[0]);
glUseProgram(0);*/
}
void UniformVec3Array::Set(int vectorCount, float * buffer)
{
glUseProgram(this->program);
//glUniform1iv(this->location, integers.size(), &integers[0]);
glUniform3fv(this->location, vectorCount, buffer);
glUseProgram(0);
}
void UniformVec4Array::Set(int vectorCount, float * buffer)
{
glUseProgram(this->program);
//glUniform1iv(this->location, integers.size(), &integers[0]);
glUniform4fv(this->location, vectorCount, buffer);
glUseProgram(0);
}