Allow use of only vertex or fragment programs.

This commit is contained in:
Brandon Wright 2010-10-21 21:32:47 -05:00
parent 007f73c2b3
commit 8b64d6d5a8
1 changed files with 19 additions and 11 deletions

View File

@ -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); xmlFreeDoc (xml_doc);
return 0; return 0;
} }
program = glCreateProgram (); 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); glUseProgram (program);
xmlFreeDoc (xml_doc); xmlFreeDoc (xml_doc);