mirror of
https://github.com/libretro/RetroArch
synced 2025-04-07 13:23:32 +00:00
Use more "safe" function pointers.
This commit is contained in:
parent
5ab9b15302
commit
b50d1fa178
@ -32,19 +32,19 @@
|
|||||||
#include <libxml/tree.h>
|
#include <libxml/tree.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
|
|
||||||
static PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
|
static PFNGLCREATEPROGRAMPROC pglCreateProgram = NULL;
|
||||||
static PFNGLUSEPROGRAMPROC glUseProgram = NULL;
|
static PFNGLUSEPROGRAMPROC pglUseProgram = NULL;
|
||||||
static PFNGLCREATESHADERPROC glCreateShader = NULL;
|
static PFNGLCREATESHADERPROC pglCreateShader = NULL;
|
||||||
static PFNGLDELETESHADERPROC glDeleteShader = NULL;
|
static PFNGLDELETESHADERPROC pglDeleteShader = NULL;
|
||||||
static PFNGLSHADERSOURCEPROC glShaderSource = NULL;
|
static PFNGLSHADERSOURCEPROC pglShaderSource = NULL;
|
||||||
static PFNGLCOMPILESHADERPROC glCompileShader = NULL;
|
static PFNGLCOMPILESHADERPROC pglCompileShader = NULL;
|
||||||
static PFNGLATTACHSHADERPROC glAttachShader = NULL;
|
static PFNGLATTACHSHADERPROC pglAttachShader = NULL;
|
||||||
static PFNGLDETACHSHADERPROC glDetachShader = NULL;
|
static PFNGLDETACHSHADERPROC pglDetachShader = NULL;
|
||||||
static PFNGLLINKPROGRAMPROC glLinkProgram = NULL;
|
static PFNGLLINKPROGRAMPROC pglLinkProgram = NULL;
|
||||||
static PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = NULL;
|
static PFNGLGETUNIFORMLOCATIONPROC pglGetUniformLocation = NULL;
|
||||||
static PFNGLUNIFORM1IPROC glUniform1i = NULL;
|
static PFNGLUNIFORM1IPROC pglUniform1i = NULL;
|
||||||
static PFNGLUNIFORM2FVPROC glUniform2fv = NULL;
|
static PFNGLUNIFORM2FVPROC pglUniform2fv = NULL;
|
||||||
static PFNGLUNIFORM4FVPROC glUniform4fv = NULL;
|
static PFNGLUNIFORM4FVPROC pglUniform4fv = NULL;
|
||||||
|
|
||||||
static bool glsl_enable = false;
|
static bool glsl_enable = false;
|
||||||
static GLuint gl_program;
|
static GLuint gl_program;
|
||||||
@ -139,25 +139,25 @@ error:
|
|||||||
bool gl_glsl_init(const char *path)
|
bool gl_glsl_init(const char *path)
|
||||||
{
|
{
|
||||||
// Load shader functions.
|
// Load shader functions.
|
||||||
glCreateProgram = SDL_GL_GetProcAddress("glCreateProgram");
|
pglCreateProgram = SDL_GL_GetProcAddress("glCreateProgram");
|
||||||
glUseProgram = SDL_GL_GetProcAddress("glUseProgram");
|
pglUseProgram = SDL_GL_GetProcAddress("glUseProgram");
|
||||||
glCreateShader = SDL_GL_GetProcAddress("glCreateShader");
|
pglCreateShader = SDL_GL_GetProcAddress("glCreateShader");
|
||||||
glDeleteShader = SDL_GL_GetProcAddress("glDeleteShader");
|
pglDeleteShader = SDL_GL_GetProcAddress("glDeleteShader");
|
||||||
glShaderSource = SDL_GL_GetProcAddress("glShaderSource");
|
pglShaderSource = SDL_GL_GetProcAddress("glShaderSource");
|
||||||
glCompileShader = SDL_GL_GetProcAddress("glCompileShader");
|
pglCompileShader = SDL_GL_GetProcAddress("glCompileShader");
|
||||||
glAttachShader = SDL_GL_GetProcAddress("glAttachShader");
|
pglAttachShader = SDL_GL_GetProcAddress("glAttachShader");
|
||||||
glDetachShader = SDL_GL_GetProcAddress("glDetachShader");
|
pglDetachShader = SDL_GL_GetProcAddress("glDetachShader");
|
||||||
glLinkProgram = SDL_GL_GetProcAddress("glLinkProgram");
|
pglLinkProgram = SDL_GL_GetProcAddress("glLinkProgram");
|
||||||
glGetUniformLocation = SDL_GL_GetProcAddress("glGetUniformLocation");
|
pglGetUniformLocation = SDL_GL_GetProcAddress("glGetUniformLocation");
|
||||||
glUniform1i = SDL_GL_GetProcAddress("glUniform1i");
|
pglUniform1i = SDL_GL_GetProcAddress("glUniform1i");
|
||||||
glUniform2fv = SDL_GL_GetProcAddress("glUniform2fv");
|
pglUniform2fv = SDL_GL_GetProcAddress("glUniform2fv");
|
||||||
glUniform4fv = SDL_GL_GetProcAddress("glUniform4fv");
|
pglUniform4fv = SDL_GL_GetProcAddress("glUniform4fv");
|
||||||
|
|
||||||
SSNES_LOG("Checking GLSL shader support ...\n");
|
SSNES_LOG("Checking GLSL shader support ...\n");
|
||||||
bool shader_support = glCreateProgram && glUseProgram && glCreateShader
|
bool shader_support = pglCreateProgram && pglUseProgram && pglCreateShader
|
||||||
&& glDeleteShader && glShaderSource && glCompileShader && glAttachShader
|
&& pglDeleteShader && pglShaderSource && pglCompileShader && pglAttachShader
|
||||||
&& glDetachShader && glLinkProgram && glGetUniformLocation
|
&& pglDetachShader && pglLinkProgram && pglGetUniformLocation
|
||||||
&& glUniform1i && glUniform2fv && glUniform4fv;
|
&& pglUniform1i && pglUniform2fv && pglUniform4fv;
|
||||||
|
|
||||||
if (!shader_support)
|
if (!shader_support)
|
||||||
{
|
{
|
||||||
@ -165,7 +165,7 @@ bool gl_glsl_init(const char *path)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_program = glCreateProgram();
|
gl_program = pglCreateProgram();
|
||||||
|
|
||||||
char *vertex_prog = NULL;
|
char *vertex_prog = NULL;
|
||||||
char *fragment_prog = NULL;
|
char *fragment_prog = NULL;
|
||||||
@ -174,25 +174,25 @@ bool gl_glsl_init(const char *path)
|
|||||||
|
|
||||||
if (vertex_prog)
|
if (vertex_prog)
|
||||||
{
|
{
|
||||||
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
|
vertex_shader = pglCreateShader(GL_VERTEX_SHADER);
|
||||||
glShaderSource(vertex_shader, 1, (const char**)&vertex_prog, 0);
|
pglShaderSource(vertex_shader, 1, (const char**)&vertex_prog, 0);
|
||||||
glCompileShader(vertex_shader);
|
pglCompileShader(vertex_shader);
|
||||||
glAttachShader(gl_program, vertex_shader);
|
pglAttachShader(gl_program, vertex_shader);
|
||||||
free(vertex_prog);
|
free(vertex_prog);
|
||||||
}
|
}
|
||||||
if (fragment_prog)
|
if (fragment_prog)
|
||||||
{
|
{
|
||||||
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
|
fragment_shader = pglCreateShader(GL_FRAGMENT_SHADER);
|
||||||
glShaderSource(fragment_shader, 1, (const char**)&fragment_prog, 0);
|
pglShaderSource(fragment_shader, 1, (const char**)&fragment_prog, 0);
|
||||||
glCompileShader(fragment_shader);
|
pglCompileShader(fragment_shader);
|
||||||
glAttachShader(gl_program, fragment_shader);
|
pglAttachShader(gl_program, fragment_shader);
|
||||||
free(fragment_prog);
|
free(fragment_prog);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vertex_prog || fragment_prog)
|
if (vertex_prog || fragment_prog)
|
||||||
{
|
{
|
||||||
glLinkProgram(gl_program);
|
pglLinkProgram(gl_program);
|
||||||
glUseProgram(gl_program);
|
pglUseProgram(gl_program);
|
||||||
}
|
}
|
||||||
|
|
||||||
glsl_enable = true;
|
glsl_enable = true;
|
||||||
@ -211,16 +211,16 @@ void gl_glsl_set_params(unsigned width, unsigned height,
|
|||||||
GLint location;
|
GLint location;
|
||||||
|
|
||||||
float inputSize[2] = {width, height};
|
float inputSize[2] = {width, height};
|
||||||
location = glGetUniformLocation(gl_program, "rubyInputSize");
|
location = pglGetUniformLocation(gl_program, "rubyInputSize");
|
||||||
glUniform2fv(location, 1, inputSize);
|
pglUniform2fv(location, 1, inputSize);
|
||||||
|
|
||||||
float outputSize[2] = {out_width, out_height};
|
float outputSize[2] = {out_width, out_height};
|
||||||
location = glGetUniformLocation(gl_program, "rubyOutputSize");
|
location = pglGetUniformLocation(gl_program, "rubyOutputSize");
|
||||||
glUniform2fv(location, 1, outputSize);
|
pglUniform2fv(location, 1, outputSize);
|
||||||
|
|
||||||
float textureSize[2] = {tex_width, tex_height};
|
float textureSize[2] = {tex_width, tex_height};
|
||||||
location = glGetUniformLocation(gl_program, "rubyTextureSize");
|
location = pglGetUniformLocation(gl_program, "rubyTextureSize");
|
||||||
glUniform2fv(location, 1, textureSize);
|
pglUniform2fv(location, 1, textureSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user