diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 100 |
1 files changed, 73 insertions, 27 deletions
@@ -45,18 +45,52 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv) return 1; } + glEnable(GL_DEPTH_TEST); glViewport(0, 0, 800, 600); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); static const float verts[] = { - 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, // top right - 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right - -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left - -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left - }; - static const GLuint indices[] = { - 0, 1, 3, // first triangle - 1, 2, 3 // second triangle + -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, + 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, + + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + + -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + -0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + 0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + 0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + + -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + 0.5f, -0.5f, -0.5f, 1.0f, 1.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f }; GLuint VBO; glGenBuffers(1, &VBO); @@ -69,14 +103,12 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv) glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); + //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); + //glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); - glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray(1); - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); - glEnableVertexAttribArray(2); Shader shader; if (shader_init(&shader, @@ -99,21 +131,15 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv) return 1; } - const GLint vertex_color_location = - shader_uniform_location(&shader, "ourColor"); - //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, GL_LINEAR); while (!glfwWindowShouldClose(window)) { - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - glClear(GL_COLOR_BUFFER_BIT); + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); shader_use(&shader); - const int r = 0;//rand(); - glUniform4f(vertex_color_location, - !(r&1), !(r&2), !(r&4), !(r&8)); glUniform1i(shader_uniform_location(&shader, "texture0"), 0); glUniform1i(shader_uniform_location(&shader, "texture1"), 1); glActiveTexture(GL_TEXTURE0); @@ -122,14 +148,34 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv) glBindTexture(GL_TEXTURE_2D, texture1.id); glBindVertexArray(VAO); + mat4 model = GLM_MAT4_IDENTITY_INIT; + glm_rotate(model, radians(-55.0f), (vec3){1.0f, 0.0f, 0.0f}); + + mat4 view = GLM_MAT4_IDENTITY_INIT; + glm_translate(view, (vec3){0.0f, 0.0f, -3.0f}); + + mat4 projection = GLM_MAT4_IDENTITY_INIT; + glm_perspective(radians(45.0f), 1.0f, 0.1f, 100.0f, projection); + + glUniformMatrix4fv(shader_uniform_location(&shader, + "model"), + 1, GL_FALSE, model[0]); + glUniformMatrix4fv(shader_uniform_location(&shader, + "view"), + 1, GL_FALSE, view[0]); + glUniformMatrix4fv(shader_uniform_location(&shader, + "projection"), + 1, GL_FALSE, projection[0]); + mat4 trans = GLM_MAT4_IDENTITY_INIT; - glm_translate(trans, (vec3){0.0f, 0.5f, 0.2f}); - glm_rotate(trans, glfwGetTime(), (vec3){0.0f, 0.0f, 1.0f}); - glm_scale(trans, (vec3){0.5f, 0.5f, 0.5f}); + //glm_translate(trans, (vec3){0.0f, 0.5f, 0.2f}); + //glm_rotate(trans, glfwGetTime(), (vec3){0.0f, 1.0f, 1.0f}); + //glm_scale(trans, (vec3){0.5f, 0.5f, 0.5f}); + glUniformMatrix4fv(shader_uniform_location(&shader, "transform"), 1, GL_FALSE, trans[0]); - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); + glDrawArrays(GL_TRIANGLES, 0, 36); glm_mat4_identity(trans); glm_rotate(trans, glfwGetTime() * 2, (vec3){0.0f, 0.0f, 1.0f}); @@ -137,7 +183,7 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv) glUniformMatrix4fv(shader_uniform_location(&shader, "transform"), 1, GL_FALSE, trans[0]); - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); + glDrawArrays(GL_TRIANGLES, 0, 36); glfwSwapBuffers(window); glfwPollEvents(); } |