summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c85
1 files changed, 26 insertions, 59 deletions
diff --git a/src/main.c b/src/main.c
index 4add491..4dfe6b6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,3 +1,4 @@
+#include "shader.h"
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <stdio.h>
@@ -40,10 +41,10 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv)
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
+ 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, // top right
+ 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // bottom right
+ -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, // bottom left
+ -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f // top left
};
static const GLuint indices[] = {
0, 1, 3, // first triangle
@@ -52,57 +53,6 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv)
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);
@@ -112,13 +62,30 @@ main([[maybe_unused]] int argc, [[maybe_unused]] char **argv)
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);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices) / 2, indices, GL_STATIC_DRAW);
+ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
+ glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));
+ glEnableVertexAttribArray(1);
+
+ Shader shader;
+ if (shader_init(&shader,
+ (const char *)src_vertex_glsl,
+ (const char *)src_fragment_glsl))
+ {
+ fprintf(stderr, "shader_init failed\n");
+ return 1;
+ }
+
+ const GLint vertex_color_location =
+ shader_uniform_location(&shader, "ourColor");
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+ //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
while (!glfwWindowShouldClose(window)) {
- glUseProgram(shader_program);
+ shader_use(&shader);
+ const int r = 0;//rand();
+ glUniform4f(vertex_color_location,
+ !(r&1), !(r&2), !(r&4), !(r&8));
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);