Use the correct names for core shader functions in GL 2.0 implementations

This was SVN commit r6985.
This commit is contained in:
Ykkrosh 2009-07-14 13:34:31 +00:00
parent cb240e474d
commit e33f3f5e64
4 changed files with 31 additions and 17 deletions

View File

@ -32,8 +32,11 @@
FUNC is used for functions that are only extensions.
FUNC2 is used for functions that have been promoted to core features.
FUNC3 is used for functions that have been promoted to core features
but have slightly changed semantics and need to be referred to by their
core name instead of extension name.
The FUNC2 call includes the version of OpenGL in which the extension was promoted,
The FUNC2/FUNC3 calls include the version of OpenGL in which the extension was promoted,
and the pre- and post-promotion names (e.g. "glBindBufferARB" vs "glBindBuffer").
If the GL driver is advertising a sufficiently high version, we load the promoted
@ -103,12 +106,12 @@ FUNC(void, glGenerateMipmapEXT, (GLenum target))
// GL_ARB_shader_objects
FUNC2(void, glDeleteObjectARB, glDeleteObject, "2.0", (GLhandleARB obj))
FUNC2(GLhandleARB, glGetHandleARB, glGetHandle, "2.0", (GLenum pname))
// FUNC2(GLhandleARB, glGetHandleARB, glGetHandle, "2.0", (GLenum pname)) // NOTE: invalid because glGetHandle doesn't exist
FUNC2(void, glDetachObjectARB, glDetachObject, "2.0", (GLhandleARB containerObj, GLhandleARB attachedObj))
FUNC2(GLhandleARB, glCreateShaderObjectARB, glCreateShaderObject, "2.0", (GLenum shaderType))
FUNC2(void, glShaderSourceARB, glShaderSource, "2.0", (GLhandleARB shaderObj, GLsizei count, const char **string, const GLint *length))
FUNC2(void, glCompileShaderARB, glCompileShader, "2.0", (GLhandleARB shaderObj))
FUNC2(GLhandleARB, glCreateProgramObjectARB, glCreateProgramObject, "2.0", (void))
FUNC2(GLhandleARB, glCreateProgramObjectARB, glCreateProgram, "2.0", (void)) // NOTE: not glCreateProgramObject
FUNC2(void, glAttachObjectARB, glAttachObject, "2.0", (GLhandleARB containerObj, GLhandleARB obj))
FUNC2(void, glLinkProgramARB, glLinkProgram, "2.0", (GLhandleARB programObj))
FUNC2(void, glUseProgramObjectARB, glUseProgramObject, "2.0", (GLhandleARB programObj))
@ -132,9 +135,12 @@ FUNC2(void, glUniform4ivARB, glUniform4iv, "2.0", (GLint location, GLsizei count
FUNC2(void, glUniformMatrix2fvARB, glUniformMatrix2fv, "2.0", (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
FUNC2(void, glUniformMatrix3fvARB, glUniformMatrix3fv, "2.0", (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
FUNC2(void, glUniformMatrix4fvARB, glUniformMatrix4fv, "2.0", (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
FUNC2(void, glGetObjectParameterfvARB, glGetObjectParameterfv, "2.0", (GLhandleARB obj, GLenum pname, GLfloat *params))
FUNC2(void, glGetObjectParameterivARB, glGetObjectParameteriv, "2.0", (GLhandleARB obj, GLenum pname, GLint *params))
FUNC2(void, glGetInfoLogARB, glGetInfoLog, "2.0", (GLhandleARB obj, GLsizei maxLength, GLsizei *length, char *infoLog))
FUNC3(void, glGetObjectParameterfvARB, glGetProgramfv, "2.0", (GLhandleARB obj, GLenum pname, GLfloat *params)) // NOTE: not glGetObjectParameterfv
FUNC3(void, glGetObjectParameterfvARB, glGetShaderfv, "2.0", (GLhandleARB obj, GLenum pname, GLfloat *params)) // NOTE: not glGetObjectParameterfv
FUNC3(void, glGetObjectParameterivARB, glGetProgramiv, "2.0", (GLhandleARB obj, GLenum pname, GLint *params)) // NOTE: not glGetObjectParameteriv
FUNC3(void, glGetObjectParameterivARB, glGetShaderiv, "2.0", (GLhandleARB obj, GLenum pname, GLint *params)) // NOTE: not glGetObjectParameteriv
FUNC3(void, glGetInfoLogARB, glGetProgramInfoLog, "2.0", (GLhandleARB obj, GLsizei maxLength, GLsizei *length, char *infoLog)) // NOTE: not glGetInfoLog
FUNC3(void, glGetInfoLogARB, glGetShaderInfoLog, "2.0", (GLhandleARB obj, GLsizei maxLength, GLsizei *length, char *infoLog)) // NOTE: not glGetInfoLog
FUNC2(void, glGetAttachedObjectsARB, glGetAttachedObjects, "2.0", (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj))
FUNC2(GLint, glGetUniformLocationARB, glGetUniformLocation, "2.0", (GLhandleARB programObj, const char *name))
FUNC2(void, glGetActiveUniformARB, glGetActiveUniform, "2.0", (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, char *name))

View File

@ -48,7 +48,9 @@ extern "C"
{
#define FUNC(ret, name, params) ret (GL_CALL_CONV *p##name) params;
#define FUNC2(ret, nameARB, nameCore, version, params) ret (GL_CALL_CONV *p##nameARB) params;
#define FUNC3(ret, nameARB, nameCore, version, params) ret (GL_CALL_CONV *p##nameCore) params;
#include "glext_funcs.h"
#undef FUNC3
#undef FUNC2
#undef FUNC
}
@ -240,14 +242,18 @@ static void importExtensionFunctions()
// (TODO: this calls ogl_HaveVersion far more times than is necessary -
// we should probably use the have_* variables instead)
#define FUNC(ret, name, params) p##name = (ret (GL_CALL_CONV*) params)SDL_GL_GetProcAddress(#name);
#define FUNC2(ret, nameARB, nameCore, version, params) \
p##nameARB = NULL; \
#define FUNC23(pname, ret, nameARB, nameCore, version, params) \
pname = NULL; \
if(ogl_HaveVersion(version)) \
p##nameARB = (ret (GL_CALL_CONV*) params)SDL_GL_GetProcAddress(#nameCore); \
if(!p##nameARB) /* use the ARB name if the driver lied about what version it supports */ \
p##nameARB = (ret (GL_CALL_CONV*) params)SDL_GL_GetProcAddress(#nameARB);
pname = (ret (GL_CALL_CONV*) params)SDL_GL_GetProcAddress(#nameCore); \
if(!pname) /* use the ARB name if the driver lied about what version it supports */ \
pname = (ret (GL_CALL_CONV*) params)SDL_GL_GetProcAddress(#nameARB);
#define FUNC2(ret, nameARB, nameCore, version, params) FUNC23(p##nameARB, ret, nameARB, nameCore, version, params)
#define FUNC3(ret, nameARB, nameCore, version, params) FUNC23(p##nameCore, ret, nameARB, nameCore, version, params)
#include "glext_funcs.h"
#undef FUNC3
#undef FUNC2
#undef FUNC23
#undef FUNC
}

View File

@ -127,7 +127,9 @@ extern const char* ogl_ExtensionString(void);
#endif
#define FUNC(ret, name, params) EXTERN_C ret (GL_CALL_CONV *p##name) params;
#define FUNC2(ret, nameARB, nameCore, version, params) EXTERN_C ret (GL_CALL_CONV *p##nameARB) params;
#define FUNC3(ret, nameARB, nameCore, version, params) EXTERN_C ret (GL_CALL_CONV *p##nameCore) params;
#include "glext_funcs.h"
#undef FUNC3
#undef FUNC2
#undef FUNC
// leave GL_CALL_CONV defined for ogl.cpp

View File

@ -142,14 +142,14 @@ static LibError Ogl_Shader_reload(Ogl_Shader* shdr, const VfsPath& pathname, Han
GLint log_length;
GLint compile_success;
pglGetObjectParameterivARB(shdr->id, GL_OBJECT_COMPILE_STATUS_ARB, &compile_success);
pglGetObjectParameterivARB(shdr->id, GL_OBJECT_INFO_LOG_LENGTH_ARB, &log_length);
pglGetShaderiv(shdr->id, GL_OBJECT_COMPILE_STATUS_ARB, &compile_success);
pglGetShaderiv(shdr->id, GL_OBJECT_INFO_LOG_LENGTH_ARB, &log_length);
if (log_length > 1)
{
char typenamebuf[32];
char* infolog = new char[log_length];
pglGetInfoLogARB(shdr->id, log_length, 0, infolog);
pglGetShaderInfoLog(shdr->id, log_length, 0, infolog);
debug_printf("Compile log for shader %hs (type %hs):\n%hs",
pathname.string().c_str(),
@ -384,12 +384,12 @@ static LibError Ogl_Program_reload(Ogl_Program* p, const VfsPath& pathname_, Han
GLint log_length;
GLint linked;
pglGetObjectParameterivARB(p->id, GL_OBJECT_LINK_STATUS_ARB, &linked);
pglGetObjectParameterivARB(p->id, GL_OBJECT_INFO_LOG_LENGTH_ARB, &log_length);
pglGetProgramiv(p->id, GL_OBJECT_LINK_STATUS_ARB, &linked);
pglGetProgramiv(p->id, GL_OBJECT_INFO_LOG_LENGTH_ARB, &log_length);
if (log_length > 1)
{
char* infolog = new char[log_length];
pglGetInfoLogARB(p->id, log_length, 0, infolog);
pglGetProgramInfoLog(p->id, log_length, 0, infolog);
debug_printf("Linker log for %hs:\n%hs\n", pathname, infolog);
delete[] infolog;