Example #1
0
void GLSL_DeleteGPUShader(shaderProgram_t *program)
{
	if(program->program)
	{
		if (program->vertexShader)
		{
			qglDetachObjectARB(program->program, program->vertexShader);
			qglDeleteObjectARB(program->vertexShader);
		}

		if (program->fragmentShader)
		{
			qglDetachObjectARB(program->program, program->fragmentShader);
			qglDeleteObjectARB(program->fragmentShader);
		}

		qglDeleteObjectARB(program->program);

		if (program->uniformBuffer)
		{
			ri.Free(program->uniformBuffer);
		}

		Com_Memset(program, 0, sizeof(*program));
	}
}
Example #2
0
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;
}
Example #3
0
void R_DeleteGlslShadersAndPrograms( void ) {
	if ( !r_enablePostProcess->integer || !glsl ) {
		return;
	}

	// detach

	qglDetachObjectARB(tr.blurHorizSp, tr.blurHorizFs);
	qglDetachObjectARB(tr.blurHorizSp, tr.mainVs);

	qglDetachObjectARB(tr.blurVerticalSp, tr.blurVerticalFs);
	qglDetachObjectARB(tr.blurVerticalSp, tr.mainVs);

	qglDetachObjectARB(tr.brightPassSp, tr.brightPassFs);
	qglDetachObjectARB(tr.brightPassSp, tr.mainVs);

	qglDetachObjectARB(tr.downSample1Sp, tr.downSample1Fs);
	qglDetachObjectARB(tr.downSample1Sp, tr.mainVs);

	qglDetachObjectARB(tr.combineSp, tr.combineFs);
	qglDetachObjectARB(tr.combineSp, tr.mainVs);

	qglDetachObjectARB(tr.colorCorrectSp, tr.colorCorrectFs);
	qglDetachObjectARB(tr.colorCorrectSp, tr.mainVs);

	// delete

	qglDeleteObjectARB(tr.blurHorizSp);
	qglDeleteObjectARB(tr.blurHorizFs);

	qglDeleteObjectARB(tr.blurVerticalSp);
	qglDeleteObjectARB(tr.blurVerticalFs);

	qglDeleteObjectARB(tr.brightPassSp);
	qglDeleteObjectARB(tr.brightPassFs);

	qglDeleteObjectARB(tr.downSample1Sp);
	qglDeleteObjectARB(tr.downSample1Fs);

	qglDeleteObjectARB(tr.combineSp);
	qglDeleteObjectARB(tr.combineFs);

	qglDeleteObjectARB(tr.colorCorrectSp);
	qglDeleteObjectARB(tr.colorCorrectFs);

	qglDeleteObjectARB(tr.mainVs);

	// reset

	tr.blurHorizSp = 0;
	tr.blurHorizFs = 0;
	tr.blurVerticalSp = 0;
	tr.blurVerticalFs = 0;
	tr.brightPassSp = 0;
	tr.brightPassFs = 0;
	tr.downSample1Sp = 0;
	tr.downSample1Fs = 0;
	tr.combineSp = 0;
	tr.combineFs = 0;
	tr.colorCorrectSp = 0;
	tr.colorCorrectFs = 0;
	tr.mainVs = 0;
}