diff options
author | kdx <kikoodx@paranoici.org> | 2023-05-08 01:36:46 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-05-08 01:36:46 +0200 |
commit | b4489a653179aee3e902dc4f0a9b087ceac8957b (patch) | |
tree | fb4fb9ef859fcb333b285887dca8fa916acb1a4b | |
parent | 6783df4a9c76d8be1fc090d94e23ec1a29c08a67 (diff) | |
download | learnopengl-b4489a653179aee3e902dc4f0a9b087ceac8957b.tar.gz |
Hello Triangle
fuck you triangle i hate you
-rw-r--r-- | Tupfile | 4 | ||||
-rw-r--r-- | src/fragment.glsl | 8 | ||||
-rw-r--r-- | src/main.c | 85 | ||||
-rw-r--r-- | src/vertex.glsl | 8 |
4 files changed, 104 insertions, 1 deletions
@@ -4,5 +4,7 @@ CFLAGS = -std=c99 -Wall -Wextra -Iglad LDFLAGS = -lGL -lglfw .gitignore -: foreach src/*.c glad/*.c |> $(CC) $(CFLAGS) -c -o %o %f |> build/%B.o +: foreach src/*.glsl |> cembed -z -s %f >%o |> build/src/embed_%B.c +: foreach src/*.c |> cp %f %o |> build/%f +: foreach build/src/*.c glad/*.c |> $(CC) $(CFLAGS) -c -o %o %f |> build/%B.o : build/*.o |> $(LD) -o %o %f $(LDFLAGS) |> build/gl diff --git a/src/fragment.glsl b/src/fragment.glsl new file mode 100644 index 0000000..ca4fb1f --- /dev/null +++ b/src/fragment.glsl @@ -0,0 +1,8 @@ +#version 330 core +out vec4 FragColor; + +void +main() +{ + FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f); +} @@ -3,6 +3,9 @@ #include <stdio.h> #include <stdlib.h> +extern unsigned char src_vertex_glsl[]; +extern unsigned char src_fragment_glsl[]; + static void framebuffer_size_callback(GLFWwindow *window, int w, int h); int @@ -36,7 +39,89 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv) glViewport(0, 0, 800, 600); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); + static const float verts[] = { + 0.5f, 0.5f, 0.0f, // top right + 0.5f, -0.5f, 0.0f, // bottom right + -0.5f, -0.5f, 0.0f, // bottom left + -0.5f, 0.5f, 0.0f // top left + }; + static const GLuint indices[] = { + 0, 1, 3, // first triangle + 1, 2, 3 // second triangle + }; + GLuint VBO; + glGenBuffers(1, &VBO); + + const GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER); + if (vertex_shader == 0) { + fprintf(stderr, "glCreateShader failed\n"); + return 1; + } + const char *const vertex_source = (const char*)src_vertex_glsl; + glShaderSource(vertex_shader, 1, &vertex_source, NULL); + glCompileShader(vertex_shader); + int success; + glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success); + if (!success) { + char info_log[512]; + glGetShaderInfoLog(vertex_shader, 512, NULL, info_log); + fprintf(stderr, "glCompileShader failed:\n%s\n", info_log); + return 1; + } + + const GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); + if (fragment_shader == 0) { + fprintf(stderr, "glCreateShader failed\n"); + return 1; + } + const char *const fragment_source = (const char*)src_fragment_glsl; + glShaderSource(fragment_shader, 1, &fragment_source, NULL); + glCompileShader(fragment_shader); + glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success); + if (!success) { + char info_log[512]; + glGetShaderInfoLog(fragment_shader, 512, NULL, info_log); + fprintf(stderr, "glCompileShader failed:\n%s\n", info_log); + return 1; + } + + const GLuint shader_program = glCreateProgram(); + if (shader_program == 0) { + fprintf(stderr, "glCreateProgram failed\n"); + return 1; + } + glAttachShader(shader_program, vertex_shader); + glAttachShader(shader_program, fragment_shader); + glLinkProgram(shader_program); + glDeleteShader(vertex_shader); + glDeleteShader(fragment_shader); + glGetProgramiv(shader_program, GL_LINK_STATUS, &success); + if (!success) { + char info_log[512]; + glGetProgramInfoLog(shader_program, 512, NULL, info_log); + fprintf(stderr, "glLinkProgram failed:\n%s\n", info_log); + return 1; + } + + GLuint EBO; + glGenBuffers(1, &EBO); + + GLuint VAO; + glGenVertexArrays(1, &VAO); + 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, 3 * sizeof(float), NULL); + glEnableVertexAttribArray(0); + + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); while (!glfwWindowShouldClose(window)) { + glUseProgram(shader_program); + glBindVertexArray(VAO); + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); + glfwSwapBuffers(window); glfwPollEvents(); } diff --git a/src/vertex.glsl b/src/vertex.glsl new file mode 100644 index 0000000..2ad10d2 --- /dev/null +++ b/src/vertex.glsl @@ -0,0 +1,8 @@ +#version 330 core +layout (location = 0) in vec3 aPos; + +void +main() +{ + gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0); +} |