penrose

program for generating penrose tilings.
Log | Files | Refs | README | LICENSE

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:
Mpenrose.cpp | 80+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Mscrot.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.