瀏覽代碼

Replace the "failed program" with just a RED glClearColor

rexim 4 年之前
父節點
當前提交
eabf68a371
共有 1 個文件被更改,包括 13 次插入47 次删除
  1. 13 47
      main.c

+ 13 - 47
main.c

@@ -106,68 +106,33 @@ bool link_program(GLuint vert_shader, GLuint frag_shader, GLuint *program)
     return program;
 }
 
+bool program_failed = false;
 GLuint program = 0;
-GLuint failed_program = 0;
-
-const char *failed_vert_source =
-    "#version 130\n"
-    "\n"
-    "void main(void)\n"
-    "{\n"
-    "    int gray = gl_VertexID ^ (gl_VertexID >> 1);\n"
-    "\n"
-    "    gl_Position = vec4(\n"
-    "        2 * (gray / 2) - 1,\n"
-    "        2 * (gray % 2) - 1,\n"
-    "        0.0,\n"
-    "        1.0);\n"
-    "};\n";
-
-const char *failed_frag_source =
-    "#version 130\n"
-    "\n"
-    "out vec4 color;\n"
-    "\n"
-    "void main(void) {\n"
-    "    color = vec4(1.0, 0.0, 0.0, 1.0);\n"
-    "};\n";
-
-
-void init_failed_program(void)
-{
-    GLuint vert = 0;
-    if (!compile_shader_source(failed_vert_source, GL_VERTEX_SHADER, &vert)) {
-        exit(1);
-    }
-
-    GLuint frag = 0;
-    if (!compile_shader_source(failed_frag_source, GL_FRAGMENT_SHADER, &frag)) {
-        exit(1);
-    }
-
-    if (!link_program(vert, frag, &failed_program)) {
-        exit(1);
-    }
-}
 
 void reload_shaders(void)
 {
     glDeleteProgram(program);
 
+    program_failed = false;
+    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+
     GLuint vert = 0;
     if (!compile_shader_file("./main.vert", GL_VERTEX_SHADER, &vert)) {
-        glUseProgram(failed_program);
+        glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
+        program_failed = true;
         return;
     }
 
     GLuint frag = 0;
     if (!compile_shader_file("./main.frag", GL_FRAGMENT_SHADER, &frag)) {
-        glUseProgram(failed_program);
+        glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
+        program_failed = true;
         return;
     }
 
     if (!link_program(vert, frag, &program)) {
-        glUseProgram(failed_program);
+        glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
+        program_failed = true;
         return;
     }
 
@@ -224,7 +189,6 @@ int main()
         exit(1);
     }
 
-    init_failed_program();
     reload_shaders();
 
     glfwSetKeyCallback(window, key_callback);
@@ -233,7 +197,9 @@ int main()
     while (!glfwWindowShouldClose(window)) {
         glClear(GL_COLOR_BUFFER_BIT);
 
-        glDrawArrays(GL_QUADS, 0, 4);
+        if (!program_failed) {
+            glDrawArrays(GL_QUADS, 0, 4);
+        }
 
         glfwSwapBuffers(window);
         glfwPollEvents();