aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjvech <jmvalenciae@unal.edu.co>2022-08-10 22:17:34 -0500
committerjvech <jmvalenciae@unal.edu.co>2022-08-10 22:17:34 -0500
commit5d2c6f0a266d1ba8761240a044d35079dcadf736 (patch)
tree7c20c575b63a98ba2c8f11af8486dc329bdaa4e4
parent60c40e5c9837d025286c78a59b32b39f84713d5d (diff)
Hello Window Done
-rw-r--r--Makefile4
-rw-r--r--TODO3
-rw-r--r--src/main.c86
-rw-r--r--src/main.h3
4 files changed, 92 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index 90ec09f..d0240b9 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,9 @@
CC := cc
CFLAGS := -Wall -Wall -pedantic -std=c11
-DLIBS := -lglfw -lGLEW -lGL -lm
+DLIBS := $(shell pkg-config --libs glfw3 opengl glew)
OBJDIR = objs
SRCDIR = src
-OBJS = $(addprefix objs/,main.o linear.o)
+OBJS = $(addprefix objs/,main.o)
BIN = mverse
all: build
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..7a7e741
--- /dev/null
+++ b/TODO
@@ -0,0 +1,3 @@
+Learning
+* Make a Hello Window
+- Make a Hello Triangle
diff --git a/src/main.c b/src/main.c
index b661dce..948932e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,8 +1,90 @@
#include <stdio.h>
-#include "linear.h"
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+
+#include <GL/glew.h>
+#include <GLFW/glfw3.h>
+
+#include "main.h"
+
+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);
+
+void
+sysError(const char *msg)
+{
+ perror(msg);
+ exit(1);
+}
+
+void
+userError(const char *msg, const char *detail)
+{
+ fprintf(stderr, "%s : %s\n", msg, detail);
+ exit(1);
+}
+
+static void
+glfw_size_callback(GLFWwindow *window, int width, int height)
+{
+ glViewport(0, 0, width, height);
+}
+
+static void
+processInput(GLFWwindow *window, struct Background *c)
+{
+ if (glfwGetKey(window, GLFW_KEY_ESCAPE) == 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;
+ }
+}
int main()
{
- printf("Opengl Here we go\n");
+ GLFWwindow *window;
+ const char *glfwErrno;
+
+ if (!glfwInit()) {
+ glfwGetError(&glfwErrno);
+ glfwTerminate();
+ userError("glfwInit() Error", glfwErrno);
+ }
+
+ window = glfwCreateWindow(640, 480, "Mverse", NULL, NULL);
+ if (!window) {
+ glfwTerminate();
+ userError("glfwCreateWindow() failed", "Can't create window");
+ }
+
+ glfwSetFramebufferSizeCallback(window, glfw_size_callback);
+ glfwMakeContextCurrent(window);
+
+ GLubyte glewErrno = glewInit();
+ if (glewErrno != GLEW_OK) {
+ glfwTerminate();
+ userError("glewInit() failed", (const char *)glewGetErrorString(glewErrno));
+ }
+
+ struct Background colors = {.R = 0.0, .G = 0.0, .B = 0.0, .A = 0.0};
+
+ while (!glfwWindowShouldClose(window)) {
+ glClear(GL_COLOR_BUFFER_BIT);
+ glClearColor(colors.R, colors.G, colors.B, colors.A);
+
+ processInput(window, &colors);
+ glfwSwapBuffers(window);
+ glfwPollEvents();
+ }
+
+ glfwTerminate();
return 0;
}
diff --git a/src/main.h b/src/main.h
new file mode 100644
index 0000000..02bef65
--- /dev/null
+++ b/src/main.h
@@ -0,0 +1,3 @@
+struct Background {
+ float R, G, B, A;
+};
Feel free to download, copy and edit any repo