OpenGL2: Direct state access, part 2: Uniforms.
This commit is contained in:
parent
275317fefb
commit
f70e9dac01
7 changed files with 147 additions and 78 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue