aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c74
1 files changed, 45 insertions, 29 deletions
diff --git a/src/main.c b/src/main.c
index af2c65a..27181ef 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2,25 +2,32 @@
#include <stdlib.h>
#include <errno.h>
#include <string.h>
+#include <signal.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
-#include "shader.h"
#include "main.h"
+#include "linear.h"
+#include "shader.h"
float vertices[] = {
- -0.5f, -0.5f, 0.0f,
- 0.5f, -0.5f, 0.0f,
- 0.0f, 0.5f, 0.0f
+ -0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 0.0f,
+ 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 0.0f,
+ -0.5f, 0.5f, 0.0f, 1.0, 1.0f, 0.0f,
+ 0.5f, 0.5f, 0.0f, 1.0, 1.0f, 0.0f,
+};
+
+unsigned int indices[] = {
+ 0, 1, 2,
+ 2, 3, 1
};
-//static void sysError(const char *msg);
static void userError(const char *msg, const char *detail);
static void glfw_size_callback(GLFWwindow *window, int width, int height);
-static void processInput(GLFWwindow *window, struct Background *c);
+static void processInput(GLFWwindow *window);
-void
+void
userError(const char *msg, const char *detail)
{
fprintf(stderr, "%s: %s\n", msg, detail);
@@ -33,19 +40,19 @@ glfw_size_callback(GLFWwindow *window, int width, int height)
glViewport(0, 0, width, height);
}
-static void
-processInput(GLFWwindow *window, struct Background *c)
+void
+processInput(GLFWwindow *window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS
- || glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS) {
+ || glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS)
glfwSetWindowShouldClose(window, 1);
- } else if (glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS
- && glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS
- && c->R >= 0.0) {
- c->R -= 0.1;
- } else if (glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS && c->R <= 1.0) {
- c->R += 0.1;
- }
+
+ if (glfwGetKey(window, GLFW_KEY_1) == GLFW_PRESS)
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ if (glfwGetKey(window, GLFW_KEY_2) == GLFW_PRESS)
+ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+ if (glfwGetKey(window, GLFW_KEY_3) == GLFW_PRESS)
+ glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
}
int main()
@@ -74,42 +81,51 @@ int main()
userError("glewInit() failed", (const char *)glewGetErrorString(glewErrno));
}
- struct Background colors = {.R = 0.0, .G = 0.0, .B = 0.0, .A = 0.0};
-
- unsigned int VBO, VAO;
+ unsigned int VBO, VAO, EBO;
glGenVertexArrays(1, &VAO);
- glBindVertexArray(VAO);
-
glGenBuffers(1, &VBO);
+ glGenBuffers(1, &EBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
+
+ glBindVertexArray(VAO);
+ 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);
+
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
unsigned int shaderProgram = shaderCreateProgram("shaders/vertex.vsh",
"shaders/fragment.vsh");
+ unsigned int transformLoc;
+ mat4 transform;
+
while (!glfwWindowShouldClose(window)) {
- processInput(window, &colors);
+ processInput(window);
- glClearColor(colors.R, colors.G, colors.B, colors.A);
+ glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
glBindVertexArray(VAO);
- glDrawArrays(GL_TRIANGLES, 0, 3);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
+
+ transformLoc = glGetUniformLocation(shaderProgram, "trans");
+ transform = linearRotate(45.0, linearVec3(0, 0, 1));
+ glUniformMatrix4fv(transformLoc, 1, GL_FALSE, transform.matrix[0]);
+ glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glfwSwapBuffers(window);
glfwPollEvents();
}
- int nattributes;
- glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nattributes);
- printf("%d\n", nattributes);
glfwTerminate();
return 0;
}
Feel free to download, copy and edit any repo