Implement fallback GL funcs so we don't call NULL func pointers.
This commit is contained in:
parent
a347b829d1
commit
cb9b7c1506
|
@ -248,12 +248,48 @@ static inline void opt_glCopyTexImage2D( GLenum target,
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
/*
|
||||||
|
* Some post-1.1 OpenGL functions can fail to be loaded through GL extensions
|
||||||
|
* when running primitive OpenGL contexts on Microsoft Windows, specifically.
|
||||||
|
*
|
||||||
|
* As of the Project64 Glide64 version, Glitch64 now assigns these GL
|
||||||
|
* functions to dummy functions to prevent access violations, while also
|
||||||
|
* displaying error information showing the missing OpenGL support.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void DisplayError(const char * message)
|
||||||
|
{
|
||||||
|
MessageBoxA(NULL, message, NULL, MB_ICONERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
|
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
|
||||||
PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
|
PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
|
||||||
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
|
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
|
||||||
PFNGLFOGCOORDFPROC glFogCoordfEXT;
|
PFNGLFOGCOORDFPROC glFogCoordfEXT;
|
||||||
|
void dummy_glActiveTexture(GLenum/*texture*/)
|
||||||
|
{ /* GLX render opcode 197 */
|
||||||
|
DisplayError("glActiveTexture");
|
||||||
|
}
|
||||||
|
void dummy_glMultiTexCoord2f(GLenum/*target*/, GLfloat/*s*/, GLfloat/*t*/)
|
||||||
|
{ /* GLX render opcode 203 */
|
||||||
|
DisplayError("glMultiTexCoord2f");
|
||||||
|
}
|
||||||
|
void dummy_glFogCoordf(GLfloat/*coord*/)
|
||||||
|
{ /* GLX render opcode 4124 */
|
||||||
|
DisplayError("glFogCoordf");
|
||||||
|
}
|
||||||
|
void dummy_glBlendFuncSeparate(GLenum, GLenum, GLenum, GLenum)
|
||||||
|
{ /* GLX render opcode 4134 */
|
||||||
|
DisplayError("glBlendFuncSeparate");
|
||||||
|
}
|
||||||
|
|
||||||
PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB;
|
PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB;
|
||||||
|
const char * dummy_wglGetExtensionsString(HDC)
|
||||||
|
{
|
||||||
|
DisplayError("wglGetExtensionsString");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
|
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
|
||||||
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
|
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
|
||||||
|
@ -265,6 +301,47 @@ PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT = NULL;
|
||||||
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL;
|
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL;
|
||||||
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
|
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
|
||||||
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
|
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
|
||||||
|
void dummy_glGenRenderbuffers(GLsizei/*n*/, GLuint* /*renderbuffers*/)
|
||||||
|
{ /* GLX vendor opcode 1423 */
|
||||||
|
DisplayError("glGenRenderbuffers");
|
||||||
|
}
|
||||||
|
void dummy_glGenFramebuffers(GLsizei/*n*/, GLuint* /*framebuffers*/)
|
||||||
|
{ /* GLX vendor opcode 1426 */
|
||||||
|
DisplayError("glGenFramebuffers");
|
||||||
|
}
|
||||||
|
GLenum dummy_glCheckFramebufferStatus(GLenum/*target*/)
|
||||||
|
{ /* GLX vendor opcode 1427 */
|
||||||
|
DisplayError("glCheckFramebufferStatus");
|
||||||
|
return 0x00008CDD; /* GL_FRAMEBUFFER_UNSUPPORTED */
|
||||||
|
}
|
||||||
|
void dummy_glBindRenderbuffer(GLenum/*target*/, GLuint/*renderbuffer*/)
|
||||||
|
{ /* GLX render opcode 4316 */
|
||||||
|
DisplayError("glBindRenderbuffer");
|
||||||
|
}
|
||||||
|
void dummy_glDeleteRenderbuffers(GLsizei/*n*/, const GLuint* /*renderbuffers*/)
|
||||||
|
{ /* GLX render opcode 4317 */
|
||||||
|
DisplayError("glDeleteRenderbuffers");
|
||||||
|
}
|
||||||
|
void dummy_glRenderbufferStorage(GLenum, GLenum, GLsizei, GLsizei)
|
||||||
|
{ /* GLX render opcode 4318 */
|
||||||
|
DisplayError("glRenderbufferStorage");
|
||||||
|
}
|
||||||
|
void dummy_glBindFramebuffer(GLenum/*target*/, GLuint/*framebuffer*/)
|
||||||
|
{ /* GLX render opcode 4319 */
|
||||||
|
DisplayError("glBindFramebuffer");
|
||||||
|
}
|
||||||
|
void dummy_glDeleteFramebuffers(GLsizei/*n*/, const GLuint* /*framebuffers*/)
|
||||||
|
{ /* GLX render opcode 4320 */
|
||||||
|
DisplayError("glDeleteFramebuffers");
|
||||||
|
}
|
||||||
|
void dummy_glFramebufferTexture2D(GLenum, GLenum, GLenum, GLuint, GLint)
|
||||||
|
{ /* GLX render opcode 4322 */
|
||||||
|
DisplayError("glFramebufferTexture2D");
|
||||||
|
}
|
||||||
|
void dummy_glFramebufferRenderbuffer(GLenum, GLenum, GLenum, GLuint)
|
||||||
|
{ /* GLX render opcode 4324 */
|
||||||
|
DisplayError("glFramebufferRenderbuffer");
|
||||||
|
}
|
||||||
|
|
||||||
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
|
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
|
||||||
PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
|
PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
|
||||||
|
@ -282,6 +359,73 @@ PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
|
||||||
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
|
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
|
||||||
PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
|
PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
|
||||||
PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
|
PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
|
||||||
|
void dummy_glSecondaryColor3f(GLfloat/*red*/, GLfloat/*green*/, GLfloat/*blue*/)
|
||||||
|
{ /* GLX render opcode 4129 */
|
||||||
|
DisplayError("glSecondaryColor3f");
|
||||||
|
}
|
||||||
|
GLuint dummy_glCreateShader(GLenum/*type*/)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glCreateShader");
|
||||||
|
return ((GLuint)(NULL));
|
||||||
|
}
|
||||||
|
void dummy_glShaderSource(GLuint, GLsizei, const GLchar **, GLint *)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glShaderSource");
|
||||||
|
}
|
||||||
|
void dummy_glCompileShader(GLuint/*shader*/)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glCompileShader");
|
||||||
|
}
|
||||||
|
GLuint dummy_glCreateProgram(void)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glCreateProgram");
|
||||||
|
return ((GLuint)(NULL));
|
||||||
|
}
|
||||||
|
void dummy_glAttachObject(GLhandleARB, GLhandleARB)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glAttachObject");
|
||||||
|
}
|
||||||
|
void dummy_glLinkProgram(GLuint/*program*/)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glLinkProgram");
|
||||||
|
}
|
||||||
|
void dummy_glUseProgram(GLuint/*program*/)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glUseProgram");
|
||||||
|
}
|
||||||
|
GLint dummy_glGetUniformLocation(GLuint/*program*/, GLchar* /*name*/)
|
||||||
|
{ /* GLX single opcode ? */
|
||||||
|
DisplayError("glGetUniformLocation");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
void dummy_glUniform1i(GLint/*location*/, GLint/*v0*/)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glUniform1i");
|
||||||
|
}
|
||||||
|
void dummy_glUniform4i(GLint/*location*/, GLint, GLint, GLint, GLint)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glUniform4i");
|
||||||
|
}
|
||||||
|
void dummy_glUniform1f(GLint/*location*/, GLfloat/*v0*/)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glUniform1f");
|
||||||
|
}
|
||||||
|
void dummy_glUniform4f(GLint/*location*/, GLfloat, GLfloat, GLfloat, GLfloat)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glUniform4f");
|
||||||
|
}
|
||||||
|
void dummy_glDeleteObject(GLhandleARB/*obj*/)
|
||||||
|
{ /* GLX render opcode ? */
|
||||||
|
DisplayError("glDeleteObject");
|
||||||
|
}
|
||||||
|
void dummy_glGetInfoLog(GLhandleARB, GLsizei, GLsizei *, GLcharARB *)
|
||||||
|
{ /* GLX single opcode ? */
|
||||||
|
DisplayError("glGetInfoLog");
|
||||||
|
}
|
||||||
|
void dummy_glGetObjectParameteriv(GLhandleARB, GLenum, GLint *)
|
||||||
|
{ /* GLX single opcode ? */
|
||||||
|
DisplayError("glGetObjectParameteriv");
|
||||||
|
}
|
||||||
|
|
||||||
// FXT1,DXT1,DXT5 support - Hiroshi Morii <koolsmoky(at)users.sourceforge.net>
|
// FXT1,DXT1,DXT5 support - Hiroshi Morii <koolsmoky(at)users.sourceforge.net>
|
||||||
// NOTE: Glide64 + GlideHQ use the following formats
|
// NOTE: Glide64 + GlideHQ use the following formats
|
||||||
|
@ -290,6 +434,10 @@ PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
|
||||||
// GL_COMPRESSED_RGB_FXT1_3DFX
|
// GL_COMPRESSED_RGB_FXT1_3DFX
|
||||||
// GL_COMPRESSED_RGBA_FXT1_3DFX
|
// GL_COMPRESSED_RGBA_FXT1_3DFX
|
||||||
PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2DARB;
|
PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2DARB;
|
||||||
|
void dummy_glCompressedTexImage2D(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)
|
||||||
|
{ /* GLX render opcode 215 */
|
||||||
|
DisplayError("glCompressedTexImage2D");
|
||||||
|
}
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
|
|
||||||
|
@ -980,6 +1128,11 @@ grSstWinOpen(
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");
|
glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");
|
||||||
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB");
|
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB");
|
||||||
|
|
||||||
|
if (glActiveTextureARB == NULL)
|
||||||
|
glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)dummy_glActiveTexture;
|
||||||
|
if (glMultiTexCoord2fARB == NULL)
|
||||||
|
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)dummy_glMultiTexCoord2f;
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
nbTextureUnits = 0;
|
nbTextureUnits = 0;
|
||||||
|
@ -1016,6 +1169,8 @@ grSstWinOpen(
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)wglGetProcAddress("glBlendFuncSeparateEXT");
|
glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)wglGetProcAddress("glBlendFuncSeparateEXT");
|
||||||
|
if (glBlendFuncSeparateEXT == NULL)
|
||||||
|
glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)dummy_glBlendFuncSeparate;
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
if (isExtensionSupported("GL_EXT_fog_coord") == 0)
|
if (isExtensionSupported("GL_EXT_fog_coord") == 0)
|
||||||
|
@ -1025,10 +1180,14 @@ grSstWinOpen(
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
glFogCoordfEXT = (PFNGLFOGCOORDFPROC)wglGetProcAddress("glFogCoordfEXT");
|
glFogCoordfEXT = (PFNGLFOGCOORDFPROC)wglGetProcAddress("glFogCoordfEXT");
|
||||||
|
if (glFogCoordfEXT == NULL)
|
||||||
|
glFogCoordfEXT = (PFNGLFOGCOORDFPROC)dummy_glFogCoordf;
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB");
|
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB");
|
||||||
|
if (wglGetExtensionsStringARB == NULL)
|
||||||
|
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)dummy_wglGetExtensionsString;
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -1038,11 +1197,33 @@ grSstWinOpen(
|
||||||
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)wglGetProcAddress("glCheckFramebufferStatusEXT");
|
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)wglGetProcAddress("glCheckFramebufferStatusEXT");
|
||||||
glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)wglGetProcAddress("glDeleteFramebuffersEXT");
|
glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)wglGetProcAddress("glDeleteFramebuffersEXT");
|
||||||
|
|
||||||
|
if (glBindFramebufferEXT == NULL)
|
||||||
|
glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)dummy_glBindFramebuffer;
|
||||||
|
if (glFramebufferTexture2DEXT == NULL)
|
||||||
|
glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)dummy_glFramebufferTexture2D;
|
||||||
|
if (glGenFramebuffersEXT == NULL)
|
||||||
|
glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)dummy_glGenFramebuffers;
|
||||||
|
if (glCheckFramebufferStatusEXT == NULL)
|
||||||
|
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)dummy_glCheckFramebufferStatus;
|
||||||
|
if (glDeleteFramebuffersEXT == NULL)
|
||||||
|
glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)dummy_glDeleteFramebuffers;
|
||||||
|
|
||||||
glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)wglGetProcAddress("glBindRenderbufferEXT");
|
glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)wglGetProcAddress("glBindRenderbufferEXT");
|
||||||
glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)wglGetProcAddress("glDeleteRenderbuffersEXT");
|
glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)wglGetProcAddress("glDeleteRenderbuffersEXT");
|
||||||
glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)wglGetProcAddress("glGenRenderbuffersEXT");
|
glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)wglGetProcAddress("glGenRenderbuffersEXT");
|
||||||
glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)wglGetProcAddress("glRenderbufferStorageEXT");
|
glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)wglGetProcAddress("glRenderbufferStorageEXT");
|
||||||
glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)wglGetProcAddress("glFramebufferRenderbufferEXT");
|
glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)wglGetProcAddress("glFramebufferRenderbufferEXT");
|
||||||
|
|
||||||
|
if (glBindRenderbufferEXT == NULL)
|
||||||
|
glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)dummy_glBindRenderbuffer;
|
||||||
|
if (glDeleteRenderbuffersEXT == NULL)
|
||||||
|
glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)dummy_glDeleteRenderbuffers;
|
||||||
|
if (glGenRenderbuffersEXT == NULL)
|
||||||
|
glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)dummy_glGenRenderbuffers;
|
||||||
|
if (glRenderbufferStorageEXT == NULL)
|
||||||
|
glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)dummy_glRenderbufferStorage;
|
||||||
|
if (glFramebufferRenderbufferEXT == NULL)
|
||||||
|
glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)dummy_glFramebufferRenderbuffer;
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
use_fbo = config.fbo && glFramebufferRenderbufferEXT;
|
use_fbo = config.fbo && glFramebufferRenderbufferEXT;
|
||||||
|
@ -1083,6 +1264,42 @@ grSstWinOpen(
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)wglGetProcAddress("glCompressedTexImage2DARB");
|
glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)wglGetProcAddress("glCompressedTexImage2DARB");
|
||||||
|
|
||||||
|
if (glCreateShaderObjectARB == NULL)
|
||||||
|
glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)dummy_glCreateShader;
|
||||||
|
if (glShaderSourceARB == NULL)
|
||||||
|
glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)dummy_glShaderSource;
|
||||||
|
if (glCompileShaderARB == NULL)
|
||||||
|
glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)dummy_glCompileShader;
|
||||||
|
if (glCreateProgramObjectARB == NULL)
|
||||||
|
glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)dummy_glCreateProgram;
|
||||||
|
if (glAttachObjectARB == NULL)
|
||||||
|
glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)dummy_glAttachObject;
|
||||||
|
if (glLinkProgramARB == NULL)
|
||||||
|
glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)dummy_glLinkProgram;
|
||||||
|
if (glUseProgramObjectARB == NULL)
|
||||||
|
glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)dummy_glUseProgram;
|
||||||
|
if (glGetUniformLocationARB == NULL)
|
||||||
|
glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)dummy_glGetUniformLocation;
|
||||||
|
if (glUniform1iARB == NULL)
|
||||||
|
glUniform1iARB = (PFNGLUNIFORM1IARBPROC)dummy_glUniform1i;
|
||||||
|
if (glUniform4iARB == NULL)
|
||||||
|
glUniform4iARB = (PFNGLUNIFORM4IARBPROC)dummy_glUniform4i;
|
||||||
|
if (glUniform4fARB == NULL)
|
||||||
|
glUniform4fARB = (PFNGLUNIFORM4FARBPROC)dummy_glUniform4f;
|
||||||
|
if (glUniform1fARB == NULL)
|
||||||
|
glUniform1fARB = (PFNGLUNIFORM1FARBPROC)dummy_glUniform1f;
|
||||||
|
if (glDeleteObjectARB == NULL)
|
||||||
|
glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)dummy_glDeleteObject;
|
||||||
|
if (glGetInfoLogARB == NULL)
|
||||||
|
glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)dummy_glGetInfoLog;
|
||||||
|
if (glGetObjectParameterivARB == NULL)
|
||||||
|
glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)dummy_glGetObjectParameteriv;
|
||||||
|
|
||||||
|
if (glSecondaryColor3f == NULL)
|
||||||
|
glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)dummy_glSecondaryColor3f;
|
||||||
|
if (glCompressedTexImage2DARB == NULL)
|
||||||
|
glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)dummy_glCompressedTexImage2D;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue