mirror of https://github.com/snes9xgit/snes9x.git
GTK+: Force OpenGL 2.0 compatibility.
This commit is contained in:
parent
94c2c4c460
commit
0ce6970cd6
|
@ -69,7 +69,7 @@ S9xOpenGLDisplayDriver::update (int width, int height, int yoffset)
|
|||
GLint filter = Settings.BilinearFilter ? GL_LINEAR : GL_NEAREST;
|
||||
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
|
||||
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
|
||||
GLint clamp = (using_shaders || !dyn_resizing) ? GL_CLAMP_TO_BORDER : GL_CLAMP_TO_EDGE;
|
||||
GLint clamp = (using_shaders || !npot) ? GL_CLAMP_TO_BORDER : GL_CLAMP_TO_EDGE;
|
||||
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, clamp);
|
||||
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, clamp);
|
||||
|
||||
|
@ -283,7 +283,7 @@ S9xOpenGLDisplayDriver::update_texture_size (int width, int height)
|
|||
{
|
||||
if (width != texture_width || height != texture_height)
|
||||
{
|
||||
if (dyn_resizing)
|
||||
if (npot)
|
||||
{
|
||||
glBindTexture (GL_TEXTURE_2D, texmap);
|
||||
|
||||
|
@ -320,62 +320,6 @@ S9xOpenGLDisplayDriver::update_texture_size (int width, int height)
|
|||
return;
|
||||
}
|
||||
|
||||
int
|
||||
S9xOpenGLDisplayDriver::pbos_available (void)
|
||||
{
|
||||
|
||||
if (gl_version_at_least (2, 1))
|
||||
return 1;
|
||||
|
||||
const char *extensions = (const char *) glGetString (GL_EXTENSIONS);
|
||||
|
||||
if (!extensions)
|
||||
return 0;
|
||||
|
||||
if (strstr (extensions, "pixel_buffer_object"))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
S9xOpenGLDisplayDriver::shaders_available (void)
|
||||
{
|
||||
const char *extensions = (const char *) glGetString (GL_EXTENSIONS);
|
||||
|
||||
if (!extensions)
|
||||
return 0;
|
||||
|
||||
if (strstr (extensions, "fragment_program") ||
|
||||
strstr (extensions, "fragment_shader"))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int npot_available (void)
|
||||
{
|
||||
if (gl_version_at_least (2, 0))
|
||||
return true;
|
||||
|
||||
const char *extensions = (const char *) glGetString (GL_EXTENSIONS);
|
||||
|
||||
if (!extensions)
|
||||
return 0;
|
||||
|
||||
if (strstr (extensions, "non_power_of_two") ||
|
||||
strstr (extensions, "npot"))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
S9xOpenGLDisplayDriver::load_shaders (const char *shader_file)
|
||||
{
|
||||
|
@ -388,31 +332,19 @@ S9xOpenGLDisplayDriver::load_shaders (const char *shader_file)
|
|||
if ((length > 6 && !strcasecmp(shader_file + length - 6, ".glslp")) ||
|
||||
(length > 5 && !strcasecmp(shader_file + length - 5, ".glsl")))
|
||||
{
|
||||
if (shaders_available() && npot_available())
|
||||
glsl_shader = new GLSLShader;
|
||||
if (glsl_shader->load_shader ((char *) shader_file))
|
||||
{
|
||||
glsl_shader = new GLSLShader;
|
||||
if (glsl_shader->load_shader ((char *) shader_file))
|
||||
{
|
||||
using_glsl_shaders = 1;
|
||||
dyn_resizing = TRUE;
|
||||
using_glsl_shaders = true;
|
||||
npot = true;
|
||||
|
||||
if (glsl_shader->param.size () > 0)
|
||||
window->enable_widget ("shader_parameters_item", TRUE);
|
||||
if (glsl_shader->param.size () > 0)
|
||||
window->enable_widget ("shader_parameters_item", TRUE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
delete glsl_shader;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("Need shader extensions and non-power-of-two-textures for GLSL.\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (!shaders_available ())
|
||||
{
|
||||
fprintf (stderr, _("Cannot load GLSL shader functions.\n"));
|
||||
delete glsl_shader;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -484,36 +416,27 @@ S9xOpenGLDisplayDriver::load_shaders (const char *shader_file)
|
|||
int
|
||||
S9xOpenGLDisplayDriver::opengl_defaults (void)
|
||||
{
|
||||
dyn_resizing = FALSE;
|
||||
using_pbos = 0;
|
||||
npot = false;
|
||||
using_pbos = false;
|
||||
|
||||
if (config->use_pbos)
|
||||
{
|
||||
if (!pbos_available ())
|
||||
{
|
||||
fprintf (stderr, _("pixel_buffer_object extension not supported.\n"));
|
||||
|
||||
config->use_pbos = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
using_pbos = 1;
|
||||
}
|
||||
using_pbos = true;
|
||||
}
|
||||
|
||||
using_shaders = 0;
|
||||
using_glsl_shaders = 0;
|
||||
using_shaders = false;
|
||||
using_glsl_shaders = false;
|
||||
glsl_shader = NULL;
|
||||
|
||||
if (config->use_shaders)
|
||||
{
|
||||
if (!load_shaders (config->fragment_shader))
|
||||
{
|
||||
config->use_shaders = 0;
|
||||
config->use_shaders = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
using_shaders = 1;
|
||||
using_shaders = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -522,10 +445,7 @@ S9xOpenGLDisplayDriver::opengl_defaults (void)
|
|||
|
||||
if (config->npot_textures)
|
||||
{
|
||||
if (npot_available ())
|
||||
{
|
||||
dyn_resizing = TRUE;
|
||||
}
|
||||
npot = true;
|
||||
}
|
||||
|
||||
glEnableClientState (GL_VERTEX_ARRAY);
|
||||
|
@ -658,13 +578,19 @@ S9xOpenGLDisplayDriver::init_gl (void)
|
|||
|
||||
context->make_current ();
|
||||
|
||||
if (epoxy_gl_version () < 20)
|
||||
{
|
||||
printf ("OpenGL version is only %d. Need 20.\n", epoxy_gl_version ());
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
S9xOpenGLDisplayDriver::init (void)
|
||||
{
|
||||
initialized = 0;
|
||||
initialized = false;
|
||||
|
||||
if (!init_gl ())
|
||||
{
|
||||
|
@ -689,7 +615,7 @@ S9xOpenGLDisplayDriver::init (void)
|
|||
|
||||
context->swap_interval (config->sync_to_vblank);
|
||||
|
||||
initialized = 1;
|
||||
initialized = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -37,8 +37,6 @@ class S9xOpenGLDisplayDriver : public S9xDisplayDriver
|
|||
private:
|
||||
int opengl_defaults ();
|
||||
void swap_buffers ();
|
||||
int pbos_available ();
|
||||
int shaders_available ();
|
||||
int load_shaders (const char *);
|
||||
void update_texture_size (int width, int height);
|
||||
int init_gl ();
|
||||
|
@ -54,10 +52,10 @@ class S9xOpenGLDisplayDriver : public S9xDisplayDriver
|
|||
GLuint fragment_shader;
|
||||
GLuint vertex_shader;
|
||||
|
||||
int dyn_resizing;
|
||||
int using_pbos;
|
||||
int using_shaders;
|
||||
int initialized;
|
||||
bool npot;
|
||||
bool using_pbos;
|
||||
bool using_shaders;
|
||||
bool initialized;
|
||||
|
||||
int using_glsl_shaders;
|
||||
GLSLShader *glsl_shader;
|
||||
|
|
Loading…
Reference in New Issue