diff options
-rw-r--r-- | src/main.c | 54 | ||||
-rw-r--r-- | src/shaders/triangle.vert.glsl | 13 |
2 files changed, 33 insertions, 34 deletions
diff --git a/src/main.c b/src/main.c index acd89c8..a891151 100644 --- a/src/main.c +++ b/src/main.c @@ -2,6 +2,7 @@ #include "vendor/stb_image.h" #include <GL/glew.h> #include <GLFW/glfw3.h> +#include <cglm/cglm.h> #include <math.h> #include <stdbool.h> #include <stdio.h> @@ -27,7 +28,7 @@ int main() { glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - GLFWwindow *window = glfwCreateWindow(320, 240, "Blue screen", NULL, NULL); + GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); if (!window) { glfwTerminate(); return -1; @@ -53,16 +54,13 @@ int main() { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); float borderColor[] = {1.0f, 1.0f, 0.0f, 1.0f}; glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); int width, height, nrChannels; - unsigned char *data = - stbi_load("res/images/container.jpg", &width, &height, &nrChannels, 0); + unsigned char *data = stbi_load("res/images/container.jpg", &width, &height, &nrChannels, 0); if (data) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, - GL_UNSIGNED_BYTE, data); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); glGenerateMipmap(GL_TEXTURE_2D); } else { printf("Failed to load texture\n"); @@ -78,25 +76,24 @@ int main() { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); stbi_set_flip_vertically_on_load(true); - data = stbi_load("res/images/awesomeface.png", &width, &height, &nrChannels, - 0); // Removed asterisk + data = stbi_load("res/images/awesomeface.png", &width, &height, &nrChannels, 0); // Removed asterisk if (data) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, - GL_UNSIGNED_BYTE, data); // Changed GL_RGB to GL_RGBA + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); // Changed GL_RGB to GL_RGBA glGenerateMipmap(GL_TEXTURE_2D); } else { printf("Failed to load texture\n"); } stbi_image_free(data); - float vertices[] = { - // positions // colors // texture coords - 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.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, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left - }; + + float vertices[] = { + // positions // texture coords + 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, // top right + 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, // bottom right + -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, // bottom left + -0.5f, 0.5f, 0.0f, 0.0f, 1.0f // top left + }; unsigned int indices[] = { 0, 1, 3, // first triangle @@ -114,26 +111,22 @@ int main() { glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, - GL_STATIC_DRAW); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); - Shader *shader = shader_create("src/shaders/triangle.vert.glsl", - "src/shaders/triangle.frag.glsl"); + Shader *shader = shader_create("src/shaders/triangle.vert.glsl", "src/shaders/triangle.frag.glsl"); if (!shader) { glfwTerminate(); return -1; } // position attribute - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void *)0); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)0); glEnableVertexAttribArray(0); // color attribute - glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), - (void *)(3 * sizeof(float))); + glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)(3 * sizeof(float))); glEnableVertexAttribArray(1); // texture coord attribute - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), - (void *)(6 * sizeof(float))); + glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)(6 * sizeof(float))); glEnableVertexAttribArray(2); shader_use(shader); @@ -149,6 +142,13 @@ int main() { glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texture2); + mat4 trans; + glm_mat4_identity(trans); + glm_rotate(trans, (float)glfwGetTime(), (vec3){0.0f, 0.0f, 1.0f}); + + unsigned int transform_location = glGetUniformLocation(shader->program, "transform"); + glUniformMatrix4fv(transform_location, 1, GL_FALSE, (float *)trans); + glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); diff --git a/src/shaders/triangle.vert.glsl b/src/shaders/triangle.vert.glsl index 22041cd..08be169 100644 --- a/src/shaders/triangle.vert.glsl +++ b/src/shaders/triangle.vert.glsl @@ -1,14 +1,13 @@ #version 330 core layout (location = 0) in vec3 aPos; -layout (location = 1) in vec3 aColor; -layout (location = 2) in vec2 aTexCoord; +layout (location = 1) in vec2 aTexCoord; -out vec3 ourColor; out vec2 TexCoord; + +uniform mat4 transform; void main() { - gl_Position = vec4(aPos, 1.0); - ourColor = aColor; - TexCoord = aTexCoord; -} + gl_Position = transform * vec4(aPos, 1.0f); + TexCoord = vec2(aTexCoord.x, aTexCoord.y); +} |