summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile48
-rw-r--r--src/main.c68
-rw-r--r--src/shaders/triangle.frag.glsl6
-rw-r--r--src/shaders/triangle.vert.glsl6
5 files changed, 129 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1fcb152
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+out
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..998e57c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,48 @@
+CC = clang
+CFLAGS = -Wall -Wextra -std=c11
+CFLAGS_DEBUG = $(CFLAGS) -g -O0
+CFLAGS_RELEASE = $(CFLAGS) -O2
+TARGET = ogl
+SRC_DIR = src
+OUT_DIR = out
+LIBS = -lglfw -framework OpenGL
+DEBUG_DIR = $(OUT_DIR)/debug
+RELEASE_DIR = $(OUT_DIR)/release
+INSTALL_DIR = /usr/local/bin
+
+# Find all .c files in the src directory
+SRCS = $(wildcard $(SRC_DIR)/*.c)
+# Generate lists of object files for debug and release builds
+OBJS_DEBUG = $(patsubst $(SRC_DIR)/%.c,$(DEBUG_DIR)/%.o,$(SRCS))
+OBJS_RELEASE = $(patsubst $(SRC_DIR)/%.c,$(RELEASE_DIR)/%.o,$(SRCS))
+
+all: debug release
+
+debug: $(DEBUG_DIR)/$(TARGET)
+
+release: $(RELEASE_DIR)/$(TARGET)
+
+# Debug build
+$(DEBUG_DIR)/$(TARGET): $(OBJS_DEBUG) | $(DEBUG_DIR)
+	$(CC) $(CFLAGS_DEBUG) $(LIBS) -o $@ $(OBJS_DEBUG)
+
+$(DEBUG_DIR)/%.o: $(SRC_DIR)/%.c | $(DEBUG_DIR)
+	$(CC) $(CFLAGS_DEBUG) $(LIBS) -c $< -o $@
+
+# Release build
+$(RELEASE_DIR)/$(TARGET): $(OBJS_RELEASE) | $(RELEASE_DIR)
+	$(CC) $(CFLAGS_RELEASE) $(LIBS) -o $@ $(OBJS_RELEASE)
+
+$(RELEASE_DIR)/%.o: $(SRC_DIR)/%.c | $(RELEASE_DIR)
+	$(CC) $(CFLAGS_RELEASE) $(LIBS) -c $< -o $@
+
+$(DEBUG_DIR) $(RELEASE_DIR):
+	mkdir -p $@
+
+clean:
+	rm -rf $(OUT_DIR)
+
+install: $(RELEASE_DIR)/$(TARGET)
+	install -m 755 $< $(INSTALL_DIR)
+
+.PHONY: all debug release clean install
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..7b498c7
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,68 @@
+#include <GLFW/glfw3.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define GL_SILENCE_DEPRECATION 1
+
+int main() {
+  // Initialize GLFW
+  if (!glfwInit()) {
+    return -1;
+  }
+
+  // Set the required options for GLFW
+  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
+  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
+  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
+  glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // Required on Mac
+
+  // Create a windowed mode window and its OpenGL context
+  GLFWwindow *window = glfwCreateWindow(800, 600, "Blue screen", NULL, NULL);
+  if (!window) {
+    glfwTerminate();
+    return -1;
+  }
+
+  glfwMakeContextCurrent(window);
+
+  float vertices[6] = {-0.5f, -0.5f, 0.0f, 0.5f, 0.5f, -0.5f};
+
+  unsigned int VBO;
+  glGenBuffers(1, &VBO);
+  glBindBuffer(GL_ARRAY_BUFFER, VBO);
+  glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+
+  const char *vertex_shader_src =
+      "#version 330 core\n"
+      "layout (location = 0) in vec3 aPos;\n"
+      "void main()\n"
+      "{\n"
+      "   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
+      "}\0";
+
+  unsigned int vertex_shader;
+  vertex_shader = glCreateShader(GL_VERTEX_SHADER);
+  glShaderSource(vertex_shader, 1, &vertex_shader_src, NULL);
+  glCompileShader(vertex_shader);
+
+  int success;
+  char info_log[512];
+  glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
+
+  if (!success) {
+    glGetShaderInfoLog(vertex_shader, 512, NULL, info_log);
+    printf("ERROR::SHADER::VERTEX::COMPILATION_FAILED %s\n", info_log);
+  }
+
+  while (!glfwWindowShouldClose(window)) {
+    glClearColor(0.1f, 0.1f, 0.25f, 0.0f);
+    glClear(GL_COLOR_BUFFER_BIT);
+
+    glfwSwapBuffers(window);
+
+    glfwPollEvents();
+  }
+
+  glfwTerminate();
+  return 0;
+}
diff --git a/src/shaders/triangle.frag.glsl b/src/shaders/triangle.frag.glsl
new file mode 100644
index 0000000..664c399
--- /dev/null
+++ b/src/shaders/triangle.frag.glsl
@@ -0,0 +1,6 @@
+#version 330 core
+out vec4 FragColor;
+void main()
+{
+    FragColor = vec4(1.0, 0.0, 0.0, 1.0);
+}
diff --git a/src/shaders/triangle.vert.glsl b/src/shaders/triangle.vert.glsl
new file mode 100644
index 0000000..dbef13e
--- /dev/null
+++ b/src/shaders/triangle.vert.glsl
@@ -0,0 +1,6 @@
+#version 330 core
+layout (location = 0) in vec2 aPos;
+void main()
+{
+    gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0);
+}