Change GLSL to use bsnes 071's unified files.

This commit is contained in:
Brandon Wright 2010-10-21 21:18:56 -05:00
parent 63b355430d
commit 007f73c2b3
5 changed files with 2394 additions and 2478 deletions

View File

@ -332,7 +332,6 @@ Snes9xConfig::save_config_file (void)
xml_out_int (xml, "npot_textures", npot_textures);
xml_out_int (xml, "use_shaders", use_shaders);
xml_out_string (xml, "fragment_shader", fragment_shader);
xml_out_string (xml, "vertex_shader", vertex_shader);
#endif
#ifdef USE_JOYSTICK
@ -550,7 +549,7 @@ Snes9xConfig::set_option (const char *name, const char *value)
else if (!strcasecmp (name, "vertex_shader"))
{
#ifdef USE_OPENGL
strncpy (vertex_shader, value, PATH_MAX);
/* Deprecated */
#endif
}
else if (!strcasecmp (name, "joystick_threshold"))
@ -1141,6 +1140,8 @@ Snes9xConfig::load_config_file (void)
parse_snes9x (xml_root);
xmlFreeDoc (xml_doc);
return 0;
}

View File

@ -1,5 +1,7 @@
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <X11/Xlib.h>
#include <GL/glx.h>
#include <GL/glxext.h>
@ -40,44 +42,6 @@ static const char *glUnmapBufferNames[] = { "glUnmapBuffer",
"glUnmapBufferEXT",
NULL };
static char *
get_file_contents (const char *filename)
{
struct stat fs;
int fd;
if (!filename || !strlen (filename) || stat (filename, &fs))
{
return NULL;
}
fd = open (filename, O_RDONLY);
if (fd == -1)
return NULL;
char *contents = new char[fs.st_size + 1];
int bytes_read = 0;
while (bytes_read < fs.st_size)
{
int retval;
retval = read (fd, contents + bytes_read, fs.st_size - bytes_read);
if (retval == -1)
{
delete[] contents;
close (fd);
return NULL;
}
bytes_read += retval;
}
contents[fs.st_size] = '\0';
close (fd);
return contents;
}
gl_proc
get_null_address_proc (const GLubyte *name)
{
@ -539,10 +503,11 @@ S9xOpenGLDisplayDriver::load_shader_functions (void)
}
int
S9xOpenGLDisplayDriver::load_shaders (const char *vertex_file,
const char *fragment_file)
S9xOpenGLDisplayDriver::load_shaders (const char *shader_file)
{
char *fragment, *vertex;
xmlDoc *xml_doc = NULL;
xmlNodePtr node = NULL;
char *fragment = NULL, *vertex = NULL;
if (!load_shader_functions ())
{
@ -550,18 +515,42 @@ S9xOpenGLDisplayDriver::load_shaders (const char *vertex_file,
return 0;
}
fragment = get_file_contents (fragment_file);
if (!fragment)
xml_doc = xmlReadFile (shader_file, NULL, 0);
if (!xml_doc)
{
fprintf (stderr, _("Cannot load fragment program.\n"));
fprintf (stderr, _("Cannot read shader file.\n"));
return 0;
}
vertex = get_file_contents (vertex_file);
if (!vertex)
node = xmlDocGetRootElement (xml_doc);
if (xmlStrcasecmp (node->name, BAD_CAST "shader"))
{
fprintf (stderr, _("Cannot load vertex program.\n"));
delete[] fragment;
fprintf (stderr, _("File %s is not a shader file.\n"), shader_file);
xmlFreeDoc (xml_doc);
return 0;
}
for (xmlNodePtr i = node->children; i; i = i->next)
{
if (!xmlStrcasecmp (i->name, BAD_CAST "vertex"))
{
if (i->children)
vertex = (char *) i->children->content;
}
if (!xmlStrcasecmp (i->name, BAD_CAST "fragment"))
{
if (i->children)
fragment = (char *) i->children->content;
}
}
if (!vertex || !fragment)
{
fprintf (stderr, _("Shader is missing either a vertex or fragment program.\n"));
xmlFreeDoc (xml_doc);
return 0;
}
@ -578,6 +567,8 @@ S9xOpenGLDisplayDriver::load_shaders (const char *vertex_file,
glUseProgram (program);
xmlFreeDoc (xml_doc);
return 1;
}
@ -602,7 +593,7 @@ S9xOpenGLDisplayDriver::opengl_defaults (void)
using_shaders = 0;
if (config->use_shaders)
{
if (!load_shaders (config->vertex_shader, config->fragment_shader))
if (!load_shaders (config->fragment_shader))
{
config->use_shaders = 0;
}

View File

@ -90,7 +90,7 @@ class S9xOpenGLDisplayDriver : public S9xDisplayDriver
void gl_swap (void);
int load_pixel_buffer_functions (void);
int load_shader_functions (void);
int load_shaders (const char *, const char *);
int load_shaders (const char *);
gl_proc get_aliased_extension (const char **name);
void update_texture_size (int width, int height);
int init_glx (void);

View File

@ -232,10 +232,6 @@ event_shader_select (GtkButton *widget, gpointer data)
{
entry = GTK_ENTRY (window->get_widget ("fragment_shader"));
}
else
{
entry = GTK_ENTRY (window->get_widget ("vertex_shader"));
}
dialog = gtk_file_chooser_dialog_new ("Select Shader File",
window->get_window (),
@ -733,7 +729,6 @@ Snes9xPreferences::move_settings_to_dialog (void)
set_check ("npot_textures", config->npot_textures);
set_check ("use_shaders", config->use_shaders);
set_entry_text ("fragment_shader", config->fragment_shader);
set_entry_text ("vertex_shader", config->vertex_shader);
#endif
#ifdef USE_JOYSTICK
@ -861,7 +856,6 @@ Snes9xPreferences::get_settings_from_dialog (void)
config->sync_every_frame = get_check ("sync_every_frame");
strncpy (config->fragment_shader, get_entry_text ("fragment_shader"), PATH_MAX);
strncpy (config->vertex_shader, get_entry_text ("vertex_shader"), PATH_MAX);
config->pbo_format = get_combo ("pixel_format");
#endif

File diff suppressed because it is too large Load Diff