-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEntityShaderProgram.cpp
More file actions
99 lines (86 loc) · 2.66 KB
/
Copy pathEntityShaderProgram.cpp
File metadata and controls
99 lines (86 loc) · 2.66 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
#include "EntityShaderProgram.h"
#include "MathCalc.h"
EntityShaderProgram::EntityShaderProgram(std::string vertexPath, std::string fragmentPath)
: ShaderProgram(vertexPath, fragmentPath)
{
}
void EntityShaderProgram::loadTransformationMatrix(Entity& entity)
{
float fArray[16];
MathCalc::createTransformationMatrix(entity, fArray);
if(isProgramUsed())
setUniform4fv("model", fArray);
else
{
useProgram();
setUniform4fv("model", fArray);
stopProgram();
}
}
void EntityShaderProgram::loadViewMatrix(Camera& camera)
{
float fArray[16];
MathCalc::createViewMatrix(camera, fArray);
if (isProgramUsed())
setUniform4fv("view", fArray);
else
{
useProgram();
setUniform4fv("view", fArray);
stopProgram();
}
}
void EntityShaderProgram::loadProjectionMatrix(ViewFrustum& frustum)
{
float fArray[16];
MathCalc::createProjectionMatrix(frustum.getWidth(), frustum.getHeight(), frustum.getFov(), frustum.getNear(), frustum.getFar(), fArray);
if(isProgramUsed())
setUniform4fv("projection", fArray);
else
{
useProgram();
setUniform4fv("projection", fArray);
stopProgram();
}
}
void EntityShaderProgram::loadTexture(unsigned int textureUnit)
{
if(isProgramUsed())
setUniform1i("texture1", textureUnit);
else
{
useProgram();
setUniform1i("texture1", textureUnit);
stopProgram();
}
}
void EntityShaderProgram::loadViewPos(Camera& camera)
{
if (isProgramUsed())
setUniform3f("viewPos", camera.getPositionVec().x, camera.getPositionVec().y, camera.getPositionVec().z);
else
{
useProgram();
setUniform3f("viewPos", camera.getPositionVec().x, camera.getPositionVec().y, camera.getPositionVec().z);
stopProgram();
}
}
void EntityShaderProgram::loadLight(Light& light)
{
if (isProgramUsed())
{
setUniform3f("light.position", light.getPositionVec().x, light.getPositionVec().y, light.getPositionVec().z);
setUniform3f("light.ambient", light.getAmbientColor().x, light.getAmbientColor().y, light.getAmbientColor().z);
setUniform3f("light.diffuse", light.getDiffuseColor().x, light.getDiffuseColor().y, light.getDiffuseColor().z);
setUniform3f("light.specular", light.getSpecularColor().x, light.getSpecularColor().y, light.getSpecularColor().z);
}
else
{
useProgram();
setUniform3f("light.position", light.getPositionVec().x, light.getPositionVec().y, light.getPositionVec().z);
setUniform3f("light.ambient", light.getAmbientColor().x, light.getAmbientColor().y, light.getAmbientColor().z);
setUniform3f("light.diffuse", light.getDiffuseColor().x, light.getDiffuseColor().y, light.getDiffuseColor().z);
setUniform3f("light.specular", light.getSpecularColor().x, light.getSpecularColor().y, light.getSpecularColor().z);
stopProgram();
}
}