From 8b64d6d5a803aeb5850aa4a989162032ccdeab20 Mon Sep 17 00:00:00 2001 From: Brandon Wright Date: Thu, 21 Oct 2010 21:32:47 -0500 Subject: [PATCH] Allow use of only vertex or fragment programs. --- gtk/src/gtk_display_driver_opengl.cpp | 30 +++++++++++++++++---------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/gtk/src/gtk_display_driver_opengl.cpp b/gtk/src/gtk_display_driver_opengl.cpp index f479676b..77d1847e 100644 --- a/gtk/src/gtk_display_driver_opengl.cpp +++ b/gtk/src/gtk_display_driver_opengl.cpp @@ -547,24 +547,32 @@ S9xOpenGLDisplayDriver::load_shaders (const char *shader_file) } } - if (!vertex || !fragment) + if (!vertex && !fragment) { - fprintf (stderr, _("Shader is missing either a vertex or fragment program.\n")); + fprintf (stderr, _("Shader lacks any programs.\n")); xmlFreeDoc (xml_doc); return 0; } program = glCreateProgram (); - vertex_shader = glCreateShader (GL_VERTEX_SHADER); - fragment_shader = glCreateShader (GL_FRAGMENT_SHADER); - glShaderSource (vertex_shader, 1, (const GLchar **) &vertex, NULL); - glShaderSource (fragment_shader, 1, (const GLchar **) &fragment, NULL); - glCompileShader (vertex_shader); - glCompileShader (fragment_shader); - glAttachShader (program, vertex_shader); - glAttachShader (program, fragment_shader); - glLinkProgram (program); + if (vertex) + { + vertex_shader = glCreateShader (GL_VERTEX_SHADER); + glShaderSource (vertex_shader, 1, (const GLchar **) &vertex, NULL); + glCompileShader (vertex_shader); + glAttachShader (program, vertex_shader); + } + + if (fragment) + { + fragment_shader = glCreateShader (GL_FRAGMENT_SHADER); + glShaderSource (fragment_shader, 1, (const GLchar **) &fragment, NULL); + glCompileShader (fragment_shader); + glAttachShader (program, fragment_shader); + } + + glLinkProgram (program); glUseProgram (program); xmlFreeDoc (xml_doc);