Add a gitattributes file
[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 }
48
49 void printMatrix4x4(aiMatrix4x4 m) {
50         fprintf(stderr, "%f, %f, %f, %f\n", m.a1, m.a2, m.a3, m.a4);
51         fprintf(stderr, "%f, %f, %f, %f\n", m.b1, m.b2, m.b3, m.b4);
52         fprintf(stderr, "%f, %f, %f, %f\n", m.c1, m.c2, m.c3, m.c4);
53         fprintf(stderr, "%f, %f, %f, %f\n", m.d1, m.d2, m.d3, m.d4);
54 }
55
56 void printVec3(glm::vec3 v) {
57         fprintf(stderr, "{ %f, %f, %f }\n", v[0], v[1], v[2]);
58 }