diff options
author | iurii plugatarov <[email protected]> | 2024-08-07 19:28:51 +0200 |
---|---|---|
committer | iurii plugatarov <[email protected]> | 2024-08-07 19:28:51 +0200 |
commit | 6bea407754e42bd73ad25b3484567226e292eacc (patch) | |
tree | cd41343cc8742c3e802901abf8865ced1a7128a9 | |
download | ogl-6bea407754e42bd73ad25b3484567226e292eacc.tar.gz |
init
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 48 | ||||
-rw-r--r-- | src/main.c | 68 | ||||
-rw-r--r-- | src/shaders/triangle.frag.glsl | 6 | ||||
-rw-r--r-- | src/shaders/triangle.vert.glsl | 6 |
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); +} |