Load lights from model
[opengl.git] / util.cpp
1 #include <GL/glew.h>
2 #include <glm/ext.hpp>
3 #include "shapes.hpp"
4 #include "util.hpp"
5
6 GLuint utilVao;
7 Program *utilProg;
8
9 Program *getUtilProg() { return utilProg; }
10
11 void initUtilProg() {
12         utilProg = new Program("plainvertex.glsl", "plainfrag.glsl");
13
14         glGenVertexArrays(1, &utilVao);
15         GLuint vbo;
16         glBindVertexArray(utilVao);
17         glGenBuffers(1, &vbo);
18         glBindBuffer(GL_ARRAY_BUFFER, vbo);
19         glBufferData(GL_ARRAY_BUFFER, sizeof(pyramid), pyramid, GL_STATIC_DRAW);
20         GLuint posLoc = glGetAttribLocation(utilProg->progId, "vPosition");
21         glEnableVertexAttribArray(posLoc);
22         glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, 0, 0);
23
24         if (glGetError()) abort();
25 }
26
27 void drawDebugNode(glm::mat4 model, glm::vec4 color) {
28         GLint prevProg; glGetIntegerv(GL_CURRENT_PROGRAM, &prevProg);
29
30         glUseProgram(utilProg->progId);
31
32         glDepthRange(0, 0.01);
33
34         glBindVertexArray(utilVao);
35         model = glm::scale(model, {0.1, 0.3, 0.1});
36         GLuint modelLoc = glGetUniformLocation(utilProg->progId, "model");
37         glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
38
39         GLuint colorLoc = glGetUniformLocation(utilProg->progId, "color");
40         glUniform4fv(colorLoc, 1, glm::value_ptr(color));
41                 
42         glDrawArrays(GL_TRIANGLES, 0, 36);
43
44         glDepthRange(0, 1.f);
45
46         glUseProgram(prevProg);
47 }