summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authoriurii plugatarov <[email protected]>2024-08-07 19:28:51 +0200
committeriurii plugatarov <[email protected]>2024-08-07 19:28:51 +0200
commit6bea407754e42bd73ad25b3484567226e292eacc (patch)
treecd41343cc8742c3e802901abf8865ced1a7128a9 /src
downloadogl-6bea407754e42bd73ad25b3484567226e292eacc.tar.gz
init
Diffstat (limited to '')
-rw-r--r--src/main.c68
-rw-r--r--src/shaders/triangle.frag.glsl6
-rw-r--r--src/shaders/triangle.vert.glsl6
3 files changed, 80 insertions, 0 deletions
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);
+}