OpenGL2: Require OpenGL 2.0.
This commit is contained in:
parent
ebc7894777
commit
251c983681
12 changed files with 302 additions and 619 deletions
|
@ -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++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue