OpenGL和GLM:如何将矩阵数组发送到GLSL

时间:2017-01-30 23:51:15

标签: c++ opengl glsl glm-math

我有这段代码:

GLuint joint = shader->getUniform("jointTransforms"); //this is always 0
glUniformMatrix4fv(joint, MAX_JOINT_COUNT, GL_FALSE, glm::value_ptr(rotations[0]));

在我的着色器中有一个像这样的统一数组:

uniform mat4 jointTransforms[MAX_JOINT_COUNT];

问题是,着色器根本没有接收到任何数据。 我错过了什么?

提前致谢

1 个答案:

答案 0 :(得分:2)

这很好用:

GLuint id_bound_program;

void TextureMgr::bind_program( GLuint id_prog ) { 
    if( id_prog == id_bound_program ) {
        return;
    }

    id_bound_program = id_prog;
    glUseProgram( id_prog );
}

void TextureMgr::update_uniform( GLuint id_program, std::string const & name_uniform, glm::mat4 const & value ) { 
    bind_program( id_program );
    glUniformMatrix4fv( glGetUniformLocation( id_program, name_uniform.c_str( ) ), 1, GL_FALSE, glm::value_ptr( value ) );
}

如果没有关于您的程序的更多信息 - 着色器的内容 - > getUniform - 以及着色器程序的内部结构,我无法给您更好的答案。

你首先没有绑定你的程序。