OpenGL2: Require OpenGL 2.0.

This commit is contained in:
SmileTheory 2016-07-24 21:29:13 -07:00
parent ebc7894777
commit 251c983681
12 changed files with 302 additions and 619 deletions

View file

@ -149,7 +149,7 @@ static uniformInfo_t uniformsInfo[] =
};
static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly)
{
char *msg;
static char msgPart[1024];
@ -157,7 +157,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
int i;
int printLevel = developerOnly ? PRINT_DEVELOPER : PRINT_ALL;
qglGetObjectParameterivARB(object, GL_OBJECT_INFO_LOG_LENGTH_ARB, &maxLength);
qglGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength);
if (maxLength <= 0)
{
@ -169,7 +169,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
if (maxLength < 1023)
{
qglGetInfoLogARB(object, maxLength, &maxLength, msgPart);
qglGetProgramInfoLog(program, maxLength, &maxLength, msgPart);
msgPart[maxLength + 1] = '\0';
@ -179,7 +179,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
{
msg = ri.Malloc(maxLength);
qglGetInfoLogARB(object, maxLength, &maxLength, msg);
qglGetProgramInfoLog(program, maxLength, &maxLength, msg);
for(i = 0; i < maxLength; i += 1024)
{
@ -192,18 +192,18 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly)
}
}
static void GLSL_PrintShaderSource(GLhandleARB object)
static void GLSL_PrintShaderSource(GLuint shader)
{
char *msg;
static char msgPart[1024];
int maxLength = 0;
int i;
qglGetObjectParameterivARB(object, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &maxLength);
qglGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &maxLength);
msg = ri.Malloc(maxLength);
qglGetShaderSourceARB(object, maxLength, &maxLength, msg);
qglShaderSource(shader, 1, (const GLchar **)&msg, &maxLength);
for(i = 0; i < maxLength; i += 1024)
{
@ -214,7 +214,7 @@ static void GLSL_PrintShaderSource(GLhandleARB object)
ri.Free(msg);
}
static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, char *dest, int size )
static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *dest, int size )
{
float fbufWidthScale, fbufHeightScale;
@ -225,7 +225,7 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha
{
Q_strcat(dest, size, "#version 130\n");
if(shaderType == GL_VERTEX_SHADER_ARB)
if(shaderType == GL_VERTEX_SHADER)
{
Q_strcat(dest, size, "#define attribute in\n");
Q_strcat(dest, size, "#define varying out\n");
@ -349,20 +349,20 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha
Q_strcat(dest, size, "#line 0\n");
}
static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, const GLcharARB *buffer, int size, GLenum shaderType)
static int GLSL_CompileGPUShader(GLuint program, GLuint *prevShader, const GLchar *buffer, int size, GLenum shaderType)
{
GLint compiled;
GLhandleARB shader;
GLuint shader;
shader = qglCreateShaderObjectARB(shaderType);
shader = qglCreateShader(shaderType);
qglShaderSourceARB(shader, 1, (const GLcharARB **)&buffer, &size);
qglShaderSource(shader, 1, (const GLchar **)&buffer, &size);
// compile shader
qglCompileShaderARB(shader);
qglCompileShader(shader);
// check if shader compiled
qglGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled);
qglGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
if(!compiled)
{
GLSL_PrintShaderSource(shader);
@ -376,12 +376,12 @@ static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, c
if (*prevShader)
{
qglDetachObjectARB(program, *prevShader);
qglDeleteObjectARB(*prevShader);
qglDetachShader(program, *prevShader);
qglDeleteShader(*prevShader);
}
// attach shader to program
qglAttachObjectARB(program, shader);
qglAttachShader(program, shader);
*prevShader = shader;
@ -392,12 +392,12 @@ static int GLSL_LoadGPUShaderText(const char *name, const char *fallback,
GLenum shaderType, char *dest, int destSize)
{
char filename[MAX_QPATH];
GLcharARB *buffer = NULL;
const GLcharARB *shaderText = NULL;
GLchar *buffer = NULL;
const GLchar *shaderText = NULL;
int size;
int result;
if(shaderType == GL_VERTEX_SHADER_ARB)
if(shaderType == GL_VERTEX_SHADER)
{
Com_sprintf(filename, sizeof(filename), "glsl/%s_vp.glsl", name);
}
@ -451,13 +451,13 @@ static int GLSL_LoadGPUShaderText(const char *name, const char *fallback,
return result;
}
static void GLSL_LinkProgram(GLhandleARB program)
static void GLSL_LinkProgram(GLuint program)
{
GLint linked;
qglLinkProgramARB(program);
qglLinkProgram(program);
qglGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &linked);
qglGetProgramiv(program, GL_LINK_STATUS, &linked);
if(!linked)
{
GLSL_PrintInfoLog(program, qfalse);
@ -466,13 +466,13 @@ static void GLSL_LinkProgram(GLhandleARB program)
}
}
static void GLSL_ValidateProgram(GLhandleARB program)
static void GLSL_ValidateProgram(GLuint program)
{
GLint validated;
qglValidateProgramARB(program);
qglValidateProgram(program);
qglGetObjectParameterivARB(program, GL_OBJECT_VALIDATE_STATUS_ARB, &validated);
qglGetProgramiv(program, GL_VALIDATE_STATUS, &validated);
if(!validated)
{
GLSL_PrintInfoLog(program, qfalse);
@ -481,19 +481,19 @@ static void GLSL_ValidateProgram(GLhandleARB program)
}
}
static void GLSL_ShowProgramUniforms(GLhandleARB program)
static void GLSL_ShowProgramUniforms(GLuint program)
{
int i, count, size;
GLenum type;
char uniformName[1000];
// query the number of active uniforms
qglGetObjectParameterivARB(program, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &count);
qglGetProgramiv(program, GL_ACTIVE_UNIFORMS, &count);
// Loop over each of the active uniforms, and set their value
for(i = 0; i < count; i++)
{
qglGetActiveUniformARB(program, i, sizeof(uniformName), NULL, &size, &type, uniformName);
qglGetActiveUniform(program, i, sizeof(uniformName), NULL, &size, &type, uniformName);
ri.Printf(PRINT_DEVELOPER, "active uniform: '%s'\n", uniformName);
}
@ -510,64 +510,64 @@ static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int
Q_strncpyz(program->name, name, sizeof(program->name));
program->program = qglCreateProgramObjectARB();
program->program = qglCreateProgram();
program->attribs = attribs;
if (!(GLSL_CompileGPUShader(program->program, &program->vertexShader, vpCode, strlen(vpCode), GL_VERTEX_SHADER_ARB)))
if (!(GLSL_CompileGPUShader(program->program, &program->vertexShader, vpCode, strlen(vpCode), GL_VERTEX_SHADER)))
{
ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_VERTEX_SHADER_ARB\n", name);
qglDeleteObjectARB(program->program);
ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_VERTEX_SHADER\n", name);
qglDeleteProgram(program->program);
return 0;
}
if(fpCode)
{
if(!(GLSL_CompileGPUShader(program->program, &program->fragmentShader, fpCode, strlen(fpCode), GL_FRAGMENT_SHADER_ARB)))
if(!(GLSL_CompileGPUShader(program->program, &program->fragmentShader, fpCode, strlen(fpCode), GL_FRAGMENT_SHADER)))
{
ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_FRAGMENT_SHADER_ARB\n", name);
qglDeleteObjectARB(program->program);
ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_FRAGMENT_SHADER\n", name);
qglDeleteProgram(program->program);
return 0;
}
}
if(attribs & ATTR_POSITION)
qglBindAttribLocationARB(program->program, ATTR_INDEX_POSITION, "attr_Position");
qglBindAttribLocation(program->program, ATTR_INDEX_POSITION, "attr_Position");
if(attribs & ATTR_TEXCOORD)
qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD, "attr_TexCoord0");
qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD, "attr_TexCoord0");
if(attribs & ATTR_LIGHTCOORD)
qglBindAttribLocationARB(program->program, ATTR_INDEX_LIGHTCOORD, "attr_TexCoord1");
qglBindAttribLocation(program->program, ATTR_INDEX_LIGHTCOORD, "attr_TexCoord1");
// if(attribs & ATTR_TEXCOORD2)
// qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD2, "attr_TexCoord2");
// qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD2, "attr_TexCoord2");
// if(attribs & ATTR_TEXCOORD3)
// qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD3, "attr_TexCoord3");
// qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD3, "attr_TexCoord3");
if(attribs & ATTR_TANGENT)
qglBindAttribLocationARB(program->program, ATTR_INDEX_TANGENT, "attr_Tangent");
qglBindAttribLocation(program->program, ATTR_INDEX_TANGENT, "attr_Tangent");
if(attribs & ATTR_NORMAL)
qglBindAttribLocationARB(program->program, ATTR_INDEX_NORMAL, "attr_Normal");
qglBindAttribLocation(program->program, ATTR_INDEX_NORMAL, "attr_Normal");
if(attribs & ATTR_COLOR)
qglBindAttribLocationARB(program->program, ATTR_INDEX_COLOR, "attr_Color");
qglBindAttribLocation(program->program, ATTR_INDEX_COLOR, "attr_Color");
if(attribs & ATTR_PAINTCOLOR)
qglBindAttribLocationARB(program->program, ATTR_INDEX_PAINTCOLOR, "attr_PaintColor");
qglBindAttribLocation(program->program, ATTR_INDEX_PAINTCOLOR, "attr_PaintColor");
if(attribs & ATTR_LIGHTDIRECTION)
qglBindAttribLocationARB(program->program, ATTR_INDEX_LIGHTDIRECTION, "attr_LightDirection");
qglBindAttribLocation(program->program, ATTR_INDEX_LIGHTDIRECTION, "attr_LightDirection");
if(attribs & ATTR_POSITION2)
qglBindAttribLocationARB(program->program, ATTR_INDEX_POSITION2, "attr_Position2");
qglBindAttribLocation(program->program, ATTR_INDEX_POSITION2, "attr_Position2");
if(attribs & ATTR_NORMAL2)
qglBindAttribLocationARB(program->program, ATTR_INDEX_NORMAL2, "attr_Normal2");
qglBindAttribLocation(program->program, ATTR_INDEX_NORMAL2, "attr_Normal2");
if(attribs & ATTR_TANGENT2)
qglBindAttribLocationARB(program->program, ATTR_INDEX_TANGENT2, "attr_Tangent2");
qglBindAttribLocation(program->program, ATTR_INDEX_TANGENT2, "attr_Tangent2");
GLSL_LinkProgram(program->program);
@ -575,7 +575,7 @@ static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int
}
static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
int attribs, qboolean fragmentShader, const GLcharARB *extra, qboolean addHeader,
int attribs, qboolean fragmentShader, const GLchar *extra, qboolean addHeader,
const char *fallback_vp, const char *fallback_fp)
{
char vpCode[32000];
@ -587,7 +587,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
size = sizeof(vpCode);
if (addHeader)
{
GLSL_GetShaderHeader(GL_VERTEX_SHADER_ARB, extra, vpCode, size);
GLSL_GetShaderHeader(GL_VERTEX_SHADER, extra, vpCode, size);
postHeader = &vpCode[strlen(vpCode)];
size -= strlen(vpCode);
}
@ -596,7 +596,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
postHeader = &vpCode[0];
}
if (!GLSL_LoadGPUShaderText(name, fallback_vp, GL_VERTEX_SHADER_ARB, postHeader, size))
if (!GLSL_LoadGPUShaderText(name, fallback_vp, GL_VERTEX_SHADER, postHeader, size))
{
return 0;
}
@ -606,7 +606,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
size = sizeof(fpCode);
if (addHeader)
{
GLSL_GetShaderHeader(GL_FRAGMENT_SHADER_ARB, extra, fpCode, size);
GLSL_GetShaderHeader(GL_FRAGMENT_SHADER, extra, fpCode, size);
postHeader = &fpCode[strlen(fpCode)];
size -= strlen(fpCode);
}
@ -615,7 +615,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name,
postHeader = &fpCode[0];
}
if (!GLSL_LoadGPUShaderText(name, fallback_fp, GL_FRAGMENT_SHADER_ARB, postHeader, size))
if (!GLSL_LoadGPUShaderText(name, fallback_fp, GL_FRAGMENT_SHADER, postHeader, size))
{
return 0;
}
@ -635,7 +635,7 @@ void GLSL_InitUniforms(shaderProgram_t *program)
size = 0;
for (i = 0; i < UNIFORM_COUNT; i++)
{
uniforms[i] = qglGetUniformLocationARB(program->program, uniformsInfo[i].name);
uniforms[i] = qglGetUniformLocation(program->program, uniformsInfo[i].name);
if (uniforms[i] == -1)
continue;
@ -855,17 +855,17 @@ void GLSL_DeleteGPUShader(shaderProgram_t *program)
{
if (program->vertexShader)
{
qglDetachObjectARB(program->program, program->vertexShader);
qglDeleteObjectARB(program->vertexShader);
qglDetachShader(program->program, program->vertexShader);
qglDeleteShader(program->vertexShader);
}
if (program->fragmentShader)
{
qglDetachObjectARB(program->program, program->fragmentShader);
qglDeleteObjectARB(program->fragmentShader);
qglDetachShader(program->program, program->fragmentShader);
qglDeleteShader(program->fragmentShader);
}
qglDeleteObjectARB(program->program);
qglDeleteProgram(program->program);
if (program->uniformBuffer)
{
@ -1360,7 +1360,7 @@ void GLSL_ShutdownGPUShaders(void)
ri.Printf(PRINT_ALL, "------- GLSL_ShutdownGPUShaders -------\n");
for (i = 0; i < ATTR_INDEX_COUNT; i++)
qglDisableVertexAttribArrayARB(i);
qglDisableVertexAttribArray(i);
GL_BindNullProgram();
@ -1406,7 +1406,7 @@ void GLSL_BindProgram(shaderProgram_t * program)
GLimp_LogComment(va("--- GLSL_BindProgram( %s ) ---\n", name));
}
if (GL_UseProgramObject(programObject))
if (GL_UseProgram(programObject))
backEnd.pc.c_glslShaderBinds++;
}