summaryrefslogtreecommitdiff
path: root/src/renderergl2/tr_dsa.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderergl2/tr_dsa.c')
-rw-r--r--src/renderergl2/tr_dsa.c71
1 files changed, 69 insertions, 2 deletions
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);
+}