mirror of https://github.com/bsnes-emu/bsnes.git
102 lines
4.5 KiB
C++
102 lines
4.5 KiB
C++
#if defined(DISPLAY_WINDOWS) || defined(DISPLAY_XORG)
|
|
PFNGLCREATEPROGRAMPROC glCreateProgram = nullptr;
|
|
PFNGLDELETEPROGRAMPROC glDeleteProgram = nullptr;
|
|
PFNGLUSEPROGRAMPROC glUseProgram = nullptr;
|
|
PFNGLCREATESHADERPROC glCreateShader = nullptr;
|
|
PFNGLDELETESHADERPROC glDeleteShader = nullptr;
|
|
PFNGLSHADERSOURCEPROC glShaderSource = nullptr;
|
|
PFNGLCOMPILESHADERPROC glCompileShader = nullptr;
|
|
PFNGLGETSHADERIVPROC glGetShaderiv = nullptr;
|
|
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = nullptr;
|
|
PFNGLATTACHSHADERPROC glAttachShader = nullptr;
|
|
PFNGLDETACHSHADERPROC glDetachShader = nullptr;
|
|
PFNGLLINKPROGRAMPROC glLinkProgram = nullptr;
|
|
PFNGLVALIDATEPROGRAMPROC glValidateProgram = nullptr;
|
|
PFNGLGETPROGRAMIVPROC glGetProgramiv = nullptr;
|
|
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = nullptr;
|
|
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = nullptr;
|
|
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = nullptr;
|
|
PFNGLBINDVERTEXARRAYPROC glBindVertexArray = nullptr;
|
|
PFNGLGENBUFFERSPROC glGenBuffers = nullptr;
|
|
PFNGLDELETEBUFFERSPROC glDeleteBuffers = nullptr;
|
|
PFNGLBINDBUFFERPROC glBindBuffer = nullptr;
|
|
PFNGLBUFFERDATAPROC glBufferData = nullptr;
|
|
PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation = nullptr;
|
|
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = nullptr;
|
|
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = nullptr;
|
|
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray = nullptr;
|
|
PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation = nullptr;
|
|
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = nullptr;
|
|
PFNGLGETUNIFORMIVPROC glGetUniformiv = nullptr;
|
|
PFNGLUNIFORM1IPROC glUniform1i = nullptr;
|
|
PFNGLUNIFORM1FPROC glUniform1f = nullptr;
|
|
PFNGLUNIFORM2FPROC glUniform2f = nullptr;
|
|
PFNGLUNIFORM2FVPROC glUniform2fv = nullptr;
|
|
PFNGLUNIFORM4FPROC glUniform4f = nullptr;
|
|
PFNGLUNIFORM4FVPROC glUniform4fv = nullptr;
|
|
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv = nullptr;
|
|
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = nullptr;
|
|
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = nullptr;
|
|
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = nullptr;
|
|
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D = nullptr;
|
|
#endif
|
|
#if defined(DISPLAY_WINDOWS)
|
|
PFNGLACTIVETEXTUREPROC glActiveTexture = nullptr;
|
|
#endif
|
|
|
|
static bool OpenGLBind() {
|
|
#define bind(prototype, function) \
|
|
function = (prototype)glGetProcAddress(#function); \
|
|
if(function == nullptr) return false
|
|
|
|
#if defined(DISPLAY_WINDOWS) || defined(DISPLAY_XORG)
|
|
bind(PFNGLCREATEPROGRAMPROC, glCreateProgram);
|
|
bind(PFNGLDELETEPROGRAMPROC, glDeleteProgram);
|
|
bind(PFNGLUSEPROGRAMPROC, glUseProgram);
|
|
bind(PFNGLCREATESHADERPROC, glCreateShader);
|
|
bind(PFNGLDELETESHADERPROC, glDeleteShader);
|
|
bind(PFNGLSHADERSOURCEPROC, glShaderSource);
|
|
bind(PFNGLCOMPILESHADERPROC, glCompileShader);
|
|
bind(PFNGLGETSHADERIVPROC, glGetShaderiv);
|
|
bind(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog);
|
|
bind(PFNGLATTACHSHADERPROC, glAttachShader);
|
|
bind(PFNGLDETACHSHADERPROC, glDetachShader);
|
|
bind(PFNGLLINKPROGRAMPROC, glLinkProgram);
|
|
bind(PFNGLVALIDATEPROGRAMPROC, glValidateProgram);
|
|
bind(PFNGLGETPROGRAMIVPROC, glGetProgramiv);
|
|
bind(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog);
|
|
bind(PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays);
|
|
bind(PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays);
|
|
bind(PFNGLBINDVERTEXARRAYPROC, glBindVertexArray);
|
|
bind(PFNGLGENBUFFERSPROC, glGenBuffers);
|
|
bind(PFNGLDELETEBUFFERSPROC, glDeleteBuffers);
|
|
bind(PFNGLBINDBUFFERPROC, glBindBuffer);
|
|
bind(PFNGLBUFFERDATAPROC, glBufferData);
|
|
bind(PFNGLGETATTRIBLOCATIONPROC, glGetAttribLocation);
|
|
bind(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer);
|
|
bind(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray);
|
|
bind(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray);
|
|
bind(PFNGLBINDFRAGDATALOCATIONPROC, glBindFragDataLocation);
|
|
bind(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation);
|
|
bind(PFNGLGETUNIFORMIVPROC, glGetUniformiv);
|
|
bind(PFNGLUNIFORM1IPROC, glUniform1i);
|
|
bind(PFNGLUNIFORM1FPROC, glUniform1f);
|
|
bind(PFNGLUNIFORM2FPROC, glUniform2f);
|
|
bind(PFNGLUNIFORM2FVPROC, glUniform2fv);
|
|
bind(PFNGLUNIFORM4FPROC, glUniform4f);
|
|
bind(PFNGLUNIFORM4FVPROC, glUniform4fv);
|
|
bind(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv);
|
|
bind(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers);
|
|
bind(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers);
|
|
bind(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer);
|
|
bind(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D);
|
|
#endif
|
|
#if defined(DISPLAY_WINDOWS)
|
|
bind(PFNGLACTIVETEXTUREPROC, glActiveTexture);
|
|
#endif
|
|
|
|
#undef bind
|
|
|
|
return true;
|
|
}
|