static void GLSL_ValidateProgram(GLhandleARB program) { GLint validated; qglValidateProgramARB(program); qglGetObjectParameterivARB(program, GL_OBJECT_VALIDATE_STATUS_ARB, &validated); if(!validated) { GLSL_PrintInfoLog(program, qfalse); ri.Printf(PRINT_ALL, "\n"); ri.Error(ERR_DROP, "shaders failed to validate"); } }
static void GLSL_LinkProgram(GLhandleARB program) { GLint linked; qglLinkProgramARB(program); qglGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &linked); if(!linked) { GLSL_PrintInfoLog(program, qfalse); ri.Printf(PRINT_ALL, "\n"); ri.Error(ERR_DROP, "shaders failed to link"); } }
static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, const GLcharARB *buffer, int size, GLenum shaderType) { GLint compiled; GLhandleARB shader; shader = qglCreateShaderObjectARB(shaderType); qglShaderSourceARB(shader, 1, (const GLcharARB **)&buffer, &size); // compile shader qglCompileShaderARB(shader); // check if shader compiled qglGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled); if(!compiled) { GLSL_PrintShaderSource(shader); GLSL_PrintInfoLog(shader, qfalse); ri.Error(ERR_DROP, "Couldn't compile shader"); return 0; } //GLSL_PrintInfoLog(shader, qtrue); //GLSL_PrintShaderSource(shader); if (*prevShader) { qglDetachObjectARB(program, *prevShader); qglDeleteObjectARB(*prevShader); } // attach shader to program qglAttachObjectARB(program, shader); *prevShader = shader; return 1; }