2
\$\begingroup\$

I've heard from several sources that it's a better approach to pass the model matrix to a shader via a uniform rather than an attribute.

I also know that the idea of a uniform is, that it has the same value for each frame.

If so, how can i change the uniforms value for each object i have in the scene?

\$\endgroup\$
3
\$\begingroup\$

You can make a uniform for as many things as you want, including per object. If you want object A) to have a different uniform then object B), then create one for each item and bind it to the shader when it is time for that object to render. Any given object in a scene can have many uniform variables.

This technique applies also to any sort of post-processing effects like lighting, in which each light may have its own color/direction/position, and can set its own uniforms for when it is going to render.

void RenderObjectA()
{
    GLuint shaderID = getShaderProgramID();
    GLuint uniformID = glGetUniformLocation(shaderID,"<desired uniform's name>");
    glUniform<varies based on type used>(uniformID, <desired uniform>)
}

void RenderObjectB()
{
    GLuint shaderID = getShaderProgramID();
    GLuint uniformID = glGetUniformLocation(shaderID,"<desired uniform 2's name>");
    glUniform<varies based on type used>(uniformID, <desired uniform 2>)
}
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.