/
Mesh.cpp
85 lines (69 loc) · 1.35 KB
/
Mesh.cpp
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
#include "Mesh.h"
Mesh::Mesh()
{
sp = NULL;
}
void Mesh::AttachShader()
{
// Set shader
sp = new ShaderProgram("shader.vert", "shader.frag");
if(!sp)
{
cerr << "Could not create shader program" << endl;
}
}
void Mesh::AttachShader(string Vert, string Frag)
{
// Set shader
sp = new ShaderProgram(Vert, Frag);
if(!sp)
{
cerr << "Could not create shader program with sources \"" << Vert
<< "\" and \"" << Frag << "\"" << endl;
AttachShader();
}
}
void Mesh::AttachVAO(VertexArrayObject *_VAO)
{
VAO = _VAO;
}
void Mesh::Draw()
{
int s = texIndices.size();
if(s > 0)
{
for(int i = 0; i < texIndices.size(); i++)
{
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(GL_TEXTURE_2D, texIndices[i]);
}
}
if(sp != NULL)
sp->Bind();
if(VAO)
VAO->Draw();
if(sp != NULL)
sp->Unbind();
if(s > 0)
{
for(int i = 0; i < texIndices.size(); i++)
{
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(GL_TEXTURE_2D, 0);
}
}
}
mat4 Mesh::GetModelMatrix()
{
return Model;
}
void Mesh::SetMaterial(ShaderMaterial _mat)
{
mat = _mat;
if(sp)
sp->SetMaterial(mat);
}
void Mesh::SetModelMatrix(mat4 _mMatrix)
{
Model = _mMatrix;
}