GTK+: Use a GLSL 1.10 shader for OpenGL < 3.0.

This commit is contained in:
Brandon Wright 2018-10-28 11:22:00 -05:00
parent f1b508de1c
commit c4412fa77b
2 changed files with 42 additions and 9 deletions

View File

@ -11,8 +11,21 @@
#include "gtk_shader_parameters.h"
#include "shaders/shader_helpers.h"
static const char *stock_vertex_shader =
"#version 130\n"
static const GLchar *stock_vertex_shader_110 =
"#version 110\n"
"attribute vec2 in_position;\n"
"attribute vec2 in_texcoord;\n"
"varying vec2 texcoord;\n"
"void main()\n"
"{\n"
" gl_Position = vec4 (in_position, 0.0, 1.0);\n"
" texcoord = in_texcoord;\n"
"}\n";
static const GLchar *stock_vertex_shader_140 =
"#version 140\n"
"in vec2 in_position;\n"
"in vec2 in_texcoord;\n"
@ -24,9 +37,19 @@ static const char *stock_vertex_shader =
" texcoord = in_texcoord;\n"
"}\n";
static const GLchar *stock_fragment_shader_110 =
"#version 110\n"
static const char *stock_fragment_shader =
"#version 130\n"
"uniform sampler2D texmap;\n"
"varying vec2 texcoord;\n"
"void main()\n"
"{\n"
" gl_FragColor = texture2D(texmap, texcoord);\n"
"}\n";
static const GLchar *stock_fragment_shader_140 =
"#version 140\n"
"uniform sampler2D texmap;\n"
"out vec4 fragcolor;\n"
@ -370,12 +393,21 @@ int S9xOpenGLDisplayDriver::opengl_defaults ()
stock_program = glCreateProgram ();
GLuint vertex_shader = glCreateShader (GL_VERTEX_SHADER);
glShaderSource (vertex_shader, 1, (const GLchar **) &stock_vertex_shader, NULL);
GLuint fragment_shader = glCreateShader (GL_FRAGMENT_SHADER);
if (version < 30)
{
glShaderSource (vertex_shader, 1, &stock_vertex_shader_110, NULL);
glShaderSource (fragment_shader, 1, &stock_fragment_shader_110, NULL);
}
else
{
glShaderSource (vertex_shader, 1, &stock_vertex_shader_140, NULL);
glShaderSource (fragment_shader, 1, &stock_fragment_shader_140, NULL);
}
glCompileShader (vertex_shader);
glAttachShader (stock_program, vertex_shader);
GLuint fragment_shader = glCreateShader (GL_FRAGMENT_SHADER);
glShaderSource (fragment_shader, 1, (const GLchar **) &stock_fragment_shader, NULL);
glCompileShader (fragment_shader);
glAttachShader (stock_program, fragment_shader);
@ -488,7 +520,7 @@ int S9xOpenGLDisplayDriver::create_context ()
context->make_current ();
int version = epoxy_gl_version ();
version = epoxy_gl_version ();
if (version < 20)
{
printf ("OpenGL version is only %d.%d. Need 2.0.\n"

View File

@ -50,6 +50,7 @@ class S9xOpenGLDisplayDriver : public S9xDisplayDriver
GLuint pbo;
bool core;
int version;
bool npot;
bool using_pbos;
bool initialized;