commit 37265ea73dd51e9dcfb7b7342311b018c4a420ca
parent f04637b819d010c5f45fa9b53eb5db17d355a378
Author: mpizzzle <m@michaelpercival.xyz>
Date: Thu, 22 Oct 2020 23:08:25 +0100
shading complete (do I need 3 VBOs?)
Diffstat:
| M | penrose.cpp | | | 80 | +++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------- |
| M | scrot.png | | | 0 | |
2 files changed, 54 insertions(+), 26 deletions(-)
diff --git a/penrose.cpp b/penrose.cpp
@@ -14,6 +14,8 @@ static const uint32_t window_h = 1080;
static const uint32_t depth = 7;
static const glm::vec4 primary(0.7f, 0.7f, 0.0f, 1.0f);
+static const glm::vec4 secondary(0.2f, 0.2f, 0.4f, 1.0f);
+static const glm::vec4 black(0.0f, 0.0f, 0.0f, 1.0f);
static const glm::vec4 background(0.2f, 0.2f, 0.4f, 1.0f);
static const GLfloat phi = 1.0 / ((1.0 + sqrt(5.0)) / 2);
@@ -169,27 +171,51 @@ int main() {
return -1;
}
- GLuint vertexArrayID;
- glGenVertexArrays(1, &vertexArrayID);
- glBindVertexArray(vertexArrayID);
-
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
- GLuint vertexbuffer;
- glGenBuffers(1, &vertexbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
+ GLuint VAOs[3], VBOs[3], EBOs[3];
+
+ glGenVertexArrays(3, VAOs);
+ glGenBuffers(3, VBOs);
+ glGenBuffers(3, EBOs);
+
+ glBindVertexArray(VAOs[0]);
+
+ glBindBuffer(GL_ARRAY_BUFFER, VBOs[0]);
glBufferData(GL_ARRAY_BUFFER, points.size() * 4 * 2, &points[0], GL_STATIC_DRAW);
- //uint32_t EBOS[3];
- //glGenBuffers(3, EBOS);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOs[0]);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, t123_indices.size() * 4, &t123_indices[0], GL_STATIC_DRAW);
- //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOS[0]);
- //glBufferData(GL_ELEMENT_ARRAY_BUFFER, t123_indices.size() * 4, &t123_indices[0], GL_STATIC_DRAW);
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (void*)0);
+ glEnableVertexAttribArray(0);
+
+ glBindVertexArray(VAOs[1]);
- //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOS[1]);
+ glBindBuffer(GL_ARRAY_BUFFER, VBOs[1]);
+ glBufferData(GL_ARRAY_BUFFER, points.size() * 4 * 2, &points[0], GL_STATIC_DRAW);
+
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOs[1]);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, t124_indices.size() * 4, &t124_indices[0], GL_STATIC_DRAW);
+
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (void*)0);
+ glEnableVertexAttribArray(0);
+
+ glBindVertexArray(VAOs[2]);
+
+ glBindBuffer(GL_ARRAY_BUFFER, VBOs[2]);
+ glBufferData(GL_ARRAY_BUFFER, points.size() * 4 * 2, &points[0], GL_STATIC_DRAW);
+
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOs[2]);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, line_indices.size() * 4, &line_indices[0], GL_STATIC_DRAW);
+
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (void*)0);
+ glEnableVertexAttribArray(0);
+
+ //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOs[1]);
//glBufferData(GL_ELEMENT_ARRAY_BUFFER, t124_indices.size() * 4, &t124_indices[0], GL_STATIC_DRAW);
- //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOS[2]);
+ //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOs[2]);
//glBufferData(GL_ELEMENT_ARRAY_BUFFER, line_indices.size() * 4, &line_indices[0], GL_STATIC_DRAW);
//uint32_t EBO;
@@ -202,10 +228,8 @@ int main() {
//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
//glBufferData(GL_ELEMENT_ARRAY_BUFFER, t123_indices.size() * 4, &t123_indices[0], GL_STATIC_DRAW);
- uint32_t EBO;
- glGenBuffers(1, &EBO);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, t124_indices.size() * 4, &t124_indices[0], GL_STATIC_DRAW);
+ //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBOs[0]);
+ //glBufferData(GL_ELEMENT_ARRAY_BUFFER, t124_indices.size() * 4, &t124_indices[0], GL_STATIC_DRAW);
GLuint programID = Shader::loadShaders("vertex.vert", "fragment.frag");
GLint paint = glGetUniformLocation(programID, "paint");
@@ -216,20 +240,24 @@ int main() {
glUseProgram(programID);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- glUniform4fv(paint, 1, &primary[0]);
+ glUniform4fv(paint, 1, &secondary[0]);
glEnableVertexAttribArray(0);
- glBindVertexArray(vertexArrayID);
+ glBindVertexArray(VAOs[0]);
+ glDrawElements(GL_TRIANGLES, t123_indices.size(), GL_UNSIGNED_INT, 0);
- glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
- glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (void*)0);
-
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
- //glDrawElements(GL_LINES, line_indices.size(), GL_UNSIGNED_INT, 0);
- //glDrawElements(GL_TRIANGLES, t123_indices.size(), GL_UNSIGNED_INT, 0);
+ glUniform4fv(paint, 1, &primary[0]);
+ glEnableVertexAttribArray(0);
+ glBindVertexArray(VAOs[1]);
glDrawElements(GL_TRIANGLES, t124_indices.size(), GL_UNSIGNED_INT, 0);
- glDisableVertexAttribArray(0);
+ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+
+ glUniform4fv(paint, 1, &black[0]);
+ glEnableVertexAttribArray(0);
+ glBindVertexArray(VAOs[2]);
+ glDrawElements(GL_LINES, line_indices.size(), GL_UNSIGNED_INT, 0);
+
glfwSwapBuffers(window);
glfwPollEvents();
}
diff --git a/scrot.png b/scrot.png
Binary files differ.