diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/renderercommon/qgl.h | 14 | ||||
| -rw-r--r-- | src/renderergl2/tr_dsa.c | 71 | ||||
| -rw-r--r-- | src/renderergl2/tr_dsa.h | 19 | ||||
| -rw-r--r-- | src/renderergl2/tr_extensions.c | 32 | ||||
| -rw-r--r-- | src/renderergl2/tr_glsl.c | 84 | ||||
| -rw-r--r-- | src/renderergl2/tr_init.c | 3 | ||||
| -rw-r--r-- | src/renderergl2/tr_local.h | 2 | 
7 files changed, 147 insertions, 78 deletions
diff --git a/src/renderercommon/qgl.h b/src/renderercommon/qgl.h index 232a1869..f4d30bf0 100644 --- a/src/renderercommon/qgl.h +++ b/src/renderercommon/qgl.h @@ -1004,6 +1004,20 @@ extern GLvoid(APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum  	GLsizei imageSize, const GLvoid *data);  extern GLvoid(APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target); +extern GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0); +extern GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0); +extern GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location, +	GLfloat v0, GLfloat v1); +extern GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location, +	GLfloat v0, GLfloat v1, GLfloat v2); +extern GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location, +	GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +extern GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location, +	GLsizei count, const GLfloat *value); +extern GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location, +	GLsizei count, GLboolean transpose, +	const GLfloat *value); +  #if defined(WIN32)  // WGL_ARB_create_context diff --git a/src/renderergl2/tr_dsa.c b/src/renderergl2/tr_dsa.c index 55a731d9..9472bb40 100644 --- a/src/renderergl2/tr_dsa.c +++ b/src/renderergl2/tr_dsa.c @@ -26,6 +26,8 @@ static struct  {  	GLuint textures[NUM_TEXTURE_BUNDLES];  	GLenum texunit; + +	GLuint program;  }  glDsaState; @@ -55,15 +57,16 @@ void GL_BindNullTextures()  	}  } -void GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) +int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture)  {  	GLuint tmu = texunit - GL_TEXTURE0_ARB;  	if (glDsaState.textures[tmu] == texture) -		return; +		return 0;  	qglBindMultiTexture(texunit, target, texture);  	glDsaState.textures[tmu] = texture; +	return 1;  }  GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) @@ -130,3 +133,67 @@ GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target)  	GL_BindMultiTexture(glDsaState.texunit, target, texture);  	qglGenerateMipmapEXT(target);  } + +void GL_BindNullProgram() +{ +	qglUseProgramObjectARB(0); +	glDsaState.program = 0; +} + +int GL_UseProgramObject(GLuint program) +{ +	if (glDsaState.program == program) +		return 0; + +	qglUseProgramObjectARB(program); +	glDsaState.program = program; +	return 1; +} + +GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0) +{ +	GL_UseProgramObject(program); +	qglUniform1iARB(location, v0); +} + +GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0) +{ +	GL_UseProgramObject(program); +	qglUniform1fARB(location, v0); +} + +GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location, +	GLfloat v0, GLfloat v1) +{ +	GL_UseProgramObject(program); +	qglUniform2fARB(location, v0, v1); +} + +GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location, +	GLfloat v0, GLfloat v1, GLfloat v2) +{ +	GL_UseProgramObject(program); +	qglUniform3fARB(location, v0, v1, v2); +} + +GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location, +	GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) +{ +	GL_UseProgramObject(program); +	qglUniform4fARB(location, v0, v1, v2, v3); +} + +GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location, +	GLsizei count, const GLfloat *value) +{ +	GL_UseProgramObject(program); +	qglUniform1fvARB(location, count, value); +} + +GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, +	GLsizei count, GLboolean transpose, +	const GLfloat *value) +{ +	GL_UseProgramObject(program); +	qglUniformMatrix4fvARB(location, count, transpose, value); +} diff --git a/src/renderergl2/tr_dsa.h b/src/renderergl2/tr_dsa.h index c166b9f3..164ab065 100644 --- a/src/renderergl2/tr_dsa.h +++ b/src/renderergl2/tr_dsa.h @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.  #include "../renderercommon/qgl.h"  void GL_BindNullTextures(void); -void GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture); +int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture);  GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture);  GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param); @@ -43,4 +43,21 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target,  GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target); +void GL_BindNullProgram(void); +int GL_UseProgramObject(GLuint program); + +GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0); +GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0); +GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location, +	GLfloat v0, GLfloat v1); +GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location, +	GLfloat v0, GLfloat v1, GLfloat v2); +GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location, +	GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location, +	GLsizei count, const GLfloat *value); +GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, +	GLsizei count, GLboolean transpose, +	const GLfloat *value); +  #endif diff --git a/src/renderergl2/tr_extensions.c b/src/renderergl2/tr_extensions.c index abafbf97..bb668da2 100644 --- a/src/renderergl2/tr_extensions.c +++ b/src/renderergl2/tr_extensions.c @@ -202,6 +202,20 @@ GLvoid (APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target  	GLsizei imageSize, const GLvoid *data);  GLvoid (APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target); +GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0); +GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0); +GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location, +	GLfloat v0, GLfloat v1); +GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location, +	GLfloat v0, GLfloat v1, GLfloat v2); +GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location, +	GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location, +	GLsizei count, const GLfloat *value); +GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location, +	GLsizei count, GLboolean transpose, +	const GLfloat *value); +  static qboolean GLimp_HaveExtension(const char *ext)  {  	const char *ptr = Q_stristr( glConfig.extensions_string, ext ); @@ -770,6 +784,7 @@ void GLimp_InitExtraExtensions()  	// GL_EXT_direct_state_access  	extension = "GL_EXT_direct_state_access"; +  	qglBindMultiTexture = GLDSA_BindMultiTexture;  	qglTextureParameterf = GLDSA_TextureParameterf;  	qglTextureParameteri = GLDSA_TextureParameteri; @@ -779,6 +794,15 @@ void GLimp_InitExtraExtensions()  	qglCompressedTextureImage2D = GLDSA_CompressedTextureImage2D;  	qglCompressedTextureSubImage2D = GLDSA_CompressedTextureSubImage2D;  	qglGenerateTextureMipmap = GLDSA_GenerateTextureMipmap; + +	qglProgramUniform1i = GLDSA_ProgramUniform1i; +	qglProgramUniform1f = GLDSA_ProgramUniform1f; +	qglProgramUniform2f = GLDSA_ProgramUniform2f; +	qglProgramUniform3f = GLDSA_ProgramUniform3f; +	qglProgramUniform4f = GLDSA_ProgramUniform4f; +	qglProgramUniform1fv = GLDSA_ProgramUniform1fv; +	qglProgramUniformMatrix4fv = GLDSA_ProgramUniformMatrix4fv; +  	glRefConfig.directStateAccess = qfalse;  	if (GLimp_HaveExtension(extension))  	{ @@ -794,6 +818,14 @@ void GLimp_InitExtraExtensions()  			qglCompressedTextureImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureImage2DEXT");  			qglCompressedTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureSubImage2DEXT");  			qglGenerateTextureMipmap = (void *)SDL_GL_GetProcAddress("glGenerateTextureMipmapEXT"); + +			qglProgramUniform1i = (void *)SDL_GL_GetProcAddress("glProgramUniform1iEXT"); +			qglProgramUniform1f = (void *)SDL_GL_GetProcAddress("glProgramUniform1fEXT"); +			qglProgramUniform2f = (void *)SDL_GL_GetProcAddress("glProgramUniform2fEXT"); +			qglProgramUniform3f = (void *)SDL_GL_GetProcAddress("glProgramUniform3fEXT"); +			qglProgramUniform4f = (void *)SDL_GL_GetProcAddress("glProgramUniform4fEXT"); +			qglProgramUniform1fv = (void *)SDL_GL_GetProcAddress("glProgramUniform1fvEXT"); +			qglProgramUniformMatrix4fv = (void *)SDL_GL_GetProcAddress("glProgramUniformMatrix4fvEXT");  		}  		ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess ? 1 : 0], extension); diff --git a/src/renderergl2/tr_glsl.c b/src/renderergl2/tr_glsl.c index 14e20105..eaa7c8f5 100644 --- a/src/renderergl2/tr_glsl.c +++ b/src/renderergl2/tr_glsl.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  // tr_glsl.c  #include "tr_local.h" -void GLSL_BindNullProgram(void); +#include "tr_dsa.h"  extern const char *fallbackShader_bokeh_vp;  extern const char *fallbackShader_bokeh_fp; @@ -482,11 +482,6 @@ static void GLSL_ShowProgramUniforms(GLhandleARB program)  	GLenum			type;  	char            uniformName[1000]; -	// install the executables in the program object as part of current state. -	qglUseProgramObjectARB(program); - -	// check for GL Errors -  	// query the number of active uniforms  	qglGetObjectParameterivARB(program, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &count); @@ -497,8 +492,6 @@ static void GLSL_ShowProgramUniforms(GLhandleARB program)  		ri.Printf(PRINT_DEVELOPER, "active uniform: '%s'\n", uniformName);  	} - -	qglUseProgramObjectARB(0);  }  static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int attribs, const char *vpCode, const char *fpCode) @@ -703,7 +696,7 @@ void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value)  	*compare = value; -	qglUniform1iARB(uniforms[uniformNum], value); +	qglProgramUniform1i(program->program, uniforms[uniformNum], value);  }  void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value) @@ -727,7 +720,7 @@ void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat valu  	*compare = value; -	qglUniform1fARB(uniforms[uniformNum], value); +	qglProgramUniform1f(program->program, uniforms[uniformNum], value);  }  void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t v) @@ -752,7 +745,7 @@ void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t  	compare[0] = v[0];  	compare[1] = v[1]; -	qglUniform2fARB(uniforms[uniformNum], v[0], v[1]); +	qglProgramUniform2f(program->program, uniforms[uniformNum], v[0], v[1]);  }  void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t v) @@ -776,7 +769,7 @@ void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t  	VectorCopy(v, compare); -	qglUniform3fARB(uniforms[uniformNum], v[0], v[1], v[2]); +	qglProgramUniform3f(program->program, uniforms[uniformNum], v[0], v[1], v[2]);  }  void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t v) @@ -800,7 +793,7 @@ void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t  	VectorCopy4(v, compare); -	qglUniform4fARB(uniforms[uniformNum], v[0], v[1], v[2], v[3]); +	qglProgramUniform4f(program->program, uniforms[uniformNum], v[0], v[1], v[2], v[3]);  }  void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_t v) @@ -824,7 +817,7 @@ void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_  	VectorCopy5(v, compare); -	qglUniform1fvARB(uniforms[uniformNum], 5, v); +	qglProgramUniform1fv(program->program, uniforms[uniformNum], 5, v);  }  void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t matrix) @@ -848,7 +841,7 @@ void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t  	Mat4Copy(matrix, compare); -	qglUniformMatrix4fvARB(uniforms[uniformNum], 1, GL_FALSE, matrix); +	qglProgramUniformMatrix4fv(program->program, uniforms[uniformNum], 1, GL_FALSE, matrix);  }  void GLSL_DeleteGPUShader(shaderProgram_t *program) @@ -925,10 +918,8 @@ void GLSL_InitGPUShaders(void)  		GLSL_InitUniforms(&tr.genericShader[i]); -		qglUseProgramObjectARB(tr.genericShader[i].program);  		GLSL_SetUniformInt(&tr.genericShader[i], UNIFORM_DIFFUSEMAP, TB_DIFFUSEMAP);  		GLSL_SetUniformInt(&tr.genericShader[i], UNIFORM_LIGHTMAP,   TB_LIGHTMAP); -		qglUseProgramObjectARB(0);  		GLSL_FinishGPUShader(&tr.genericShader[i]); @@ -945,9 +936,7 @@ void GLSL_InitGPUShaders(void)  	GLSL_InitUniforms(&tr.textureColorShader); -	qglUseProgramObjectARB(tr.textureColorShader.program);  	GLSL_SetUniformInt(&tr.textureColorShader, UNIFORM_TEXTUREMAP, TB_DIFFUSEMAP); -	qglUseProgramObjectARB(0);  	GLSL_FinishGPUShader(&tr.textureColorShader); @@ -993,9 +982,7 @@ void GLSL_InitGPUShaders(void)  		GLSL_InitUniforms(&tr.dlightShader[i]); -		qglUseProgramObjectARB(tr.dlightShader[i].program);  		GLSL_SetUniformInt(&tr.dlightShader[i], UNIFORM_DIFFUSEMAP, TB_DIFFUSEMAP); -		qglUseProgramObjectARB(0);  		GLSL_FinishGPUShader(&tr.dlightShader[i]); @@ -1123,7 +1110,6 @@ void GLSL_InitGPUShaders(void)  		GLSL_InitUniforms(&tr.lightallShader[i]); -		qglUseProgramObjectARB(tr.lightallShader[i].program);  		GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_DIFFUSEMAP,  TB_DIFFUSEMAP);  		GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_LIGHTMAP,    TB_LIGHTMAP);  		GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_NORMALMAP,   TB_NORMALMAP); @@ -1131,7 +1117,6 @@ void GLSL_InitGPUShaders(void)  		GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_SPECULARMAP, TB_SPECULARMAP);  		GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_SHADOWMAP,   TB_SHADOWMAP);  		GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_CUBEMAP,     TB_CUBEMAP); -		qglUseProgramObjectARB(0);  		GLSL_FinishGPUShader(&tr.lightallShader[i]); @@ -1164,9 +1149,7 @@ void GLSL_InitGPUShaders(void)  	GLSL_InitUniforms(&tr.pshadowShader); -	qglUseProgramObjectARB(tr.pshadowShader.program);  	GLSL_SetUniformInt(&tr.pshadowShader, UNIFORM_SHADOWMAP, TB_DIFFUSEMAP); -	qglUseProgramObjectARB(0);  	GLSL_FinishGPUShader(&tr.pshadowShader); @@ -1183,9 +1166,7 @@ void GLSL_InitGPUShaders(void)  	GLSL_InitUniforms(&tr.down4xShader); -	qglUseProgramObjectARB(tr.down4xShader.program);  	GLSL_SetUniformInt(&tr.down4xShader, UNIFORM_TEXTUREMAP, TB_DIFFUSEMAP); -	qglUseProgramObjectARB(0);  	GLSL_FinishGPUShader(&tr.down4xShader); @@ -1202,9 +1183,7 @@ void GLSL_InitGPUShaders(void)  	GLSL_InitUniforms(&tr.bokehShader); -	qglUseProgramObjectARB(tr.bokehShader.program);  	GLSL_SetUniformInt(&tr.bokehShader, UNIFORM_TEXTUREMAP, TB_DIFFUSEMAP); -	qglUseProgramObjectARB(0);  	GLSL_FinishGPUShader(&tr.bokehShader); @@ -1221,10 +1200,8 @@ void GLSL_InitGPUShaders(void)  	GLSL_InitUniforms(&tr.tonemapShader); -	qglUseProgramObjectARB(tr.tonemapShader.program);  	GLSL_SetUniformInt(&tr.tonemapShader, UNIFORM_TEXTUREMAP, TB_COLORMAP);  	GLSL_SetUniformInt(&tr.tonemapShader, UNIFORM_LEVELSMAP,  TB_LEVELSMAP); -	qglUseProgramObjectARB(0);  	GLSL_FinishGPUShader(&tr.tonemapShader); @@ -1246,9 +1223,7 @@ void GLSL_InitGPUShaders(void)  		GLSL_InitUniforms(&tr.calclevels4xShader[i]); -		qglUseProgramObjectARB(tr.calclevels4xShader[i].program);  		GLSL_SetUniformInt(&tr.calclevels4xShader[i], UNIFORM_TEXTUREMAP, TB_DIFFUSEMAP); -		qglUseProgramObjectARB(0);  		GLSL_FinishGPUShader(&tr.calclevels4xShader[i]); @@ -1279,13 +1254,11 @@ void GLSL_InitGPUShaders(void)  	GLSL_InitUniforms(&tr.shadowmaskShader); -	qglUseProgramObjectARB(tr.shadowmaskShader.program);  	GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SCREENDEPTHMAP, TB_COLORMAP);  	GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SHADOWMAP,  TB_SHADOWMAP);  	GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SHADOWMAP2, TB_SHADOWMAP2);  	GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SHADOWMAP3, TB_SHADOWMAP3);  	GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SHADOWMAP4, TB_SHADOWMAP4); -	qglUseProgramObjectARB(0);  	GLSL_FinishGPUShader(&tr.shadowmaskShader); @@ -1302,9 +1275,7 @@ void GLSL_InitGPUShaders(void)  	GLSL_InitUniforms(&tr.ssaoShader); -	qglUseProgramObjectARB(tr.ssaoShader.program);  	GLSL_SetUniformInt(&tr.ssaoShader, UNIFORM_SCREENDEPTHMAP, TB_COLORMAP); -	qglUseProgramObjectARB(0);  	GLSL_FinishGPUShader(&tr.ssaoShader); @@ -1329,10 +1300,8 @@ void GLSL_InitGPUShaders(void)  		GLSL_InitUniforms(&tr.depthBlurShader[i]); -		qglUseProgramObjectARB(tr.depthBlurShader[i].program);  		GLSL_SetUniformInt(&tr.depthBlurShader[i], UNIFORM_SCREENIMAGEMAP, TB_COLORMAP);  		GLSL_SetUniformInt(&tr.depthBlurShader[i], UNIFORM_SCREENDEPTHMAP, TB_LIGHTMAP); -		qglUseProgramObjectARB(0);  		GLSL_FinishGPUShader(&tr.depthBlurShader[i]); @@ -1350,9 +1319,7 @@ void GLSL_InitGPUShaders(void)  	GLSL_InitUniforms(&tr.testcubeShader); -	qglUseProgramObjectARB(tr.testcubeShader.program);  	GLSL_SetUniformInt(&tr.testcubeShader, UNIFORM_TEXTUREMAP, TB_COLORMAP); -	qglUseProgramObjectARB(0);  	GLSL_FinishGPUShader(&tr.testcubeShader); @@ -1376,7 +1343,7 @@ void GLSL_ShutdownGPUShaders(void)  	for (i = 0; i < ATTR_INDEX_COUNT; i++)  		qglDisableVertexAttribArrayARB(i); -	GLSL_BindNullProgram(); +	GL_BindNullProgram();  	for ( i = 0; i < GENERICDEF_COUNT; i++)  		GLSL_DeleteGPUShader(&tr.genericShader[i]); @@ -1406,47 +1373,22 @@ void GLSL_ShutdownGPUShaders(void)  	for ( i = 0; i < 2; i++)  		GLSL_DeleteGPUShader(&tr.depthBlurShader[i]); - -	glState.currentProgram = 0; -	qglUseProgramObjectARB(0);  }  void GLSL_BindProgram(shaderProgram_t * program)  { -	if(!program) -	{ -		GLSL_BindNullProgram(); -		return; -	} +	GLuint programObject = program ? program->program : 0; +	char *name = program ? program->name : "NULL";  	if(r_logFile->integer)  	{  		// don't just call LogComment, or we will get a call to va() every frame! -		GLimp_LogComment(va("--- GL_BindProgram( %s ) ---\n", program->name)); +		GLimp_LogComment(va("--- GLSL_BindProgram( %s ) ---\n", name));  	} -	if(glState.currentProgram != program) -	{ -		qglUseProgramObjectARB(program->program); -		glState.currentProgram = program; +	if (GL_UseProgramObject(programObject))  		backEnd.pc.c_glslShaderBinds++; -	} -} - - -void GLSL_BindNullProgram(void) -{ -	if(r_logFile->integer) -	{ -		GLimp_LogComment("--- GL_BindNullProgram ---\n"); -	} - -	if(glState.currentProgram) -	{ -		qglUseProgramObjectARB(0); -		glState.currentProgram = NULL; -	}  } diff --git a/src/renderergl2/tr_init.c b/src/renderergl2/tr_init.c index 05b00465..8e27c620 100644 --- a/src/renderergl2/tr_init.c +++ b/src/renderergl2/tr_init.c @@ -902,8 +902,7 @@ void GL_SetDefaultState( void )  	glState.faceCulling = CT_TWO_SIDED;  	glState.faceCullFront = qtrue; -	glState.currentProgram = 0; -	qglUseProgramObjectARB(0); +	GL_BindNullProgram();  	if (glRefConfig.vertexArrayObject)  		qglBindVertexArrayARB(0); diff --git a/src/renderergl2/tr_local.h b/src/renderergl2/tr_local.h index 0dd61674..f56d5f51 100644 --- a/src/renderergl2/tr_local.h +++ b/src/renderergl2/tr_local.h @@ -1361,7 +1361,6 @@ typedef struct {  	float           vertexAttribsInterpolation;  	qboolean        vertexAnimation;  	uint32_t        vertexAttribsEnabled;  // global if no VAOs, tess only otherwise -	shaderProgram_t *currentProgram;  	FBO_t          *currentFBO;  	vao_t          *currentVao;  	mat4_t        modelview; @@ -2215,7 +2214,6 @@ void GLSL_InitGPUShaders(void);  void GLSL_ShutdownGPUShaders(void);  void GLSL_VertexAttribPointers(uint32_t attribBits);  void GLSL_BindProgram(shaderProgram_t * program); -void GLSL_BindNullProgram(void);  void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value);  void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value);  | 
