我在着色器中有一套制服,如下所示:
uniform vec3 origins[10];
我的代码中还有一个 std::vector ,如下所示:
std::vector<glm::vec3> origins;
充满了十个
glm::vec3
元素。
有谁知道如何将其传递给着色器?我想:
GLint originsLoc = glGetUniformLocation(programID, "origins");
glUniform3fv(originsLoc, 10, origins.data());
可以做到,但无法编译。错误提示有
no matching function for call to 'glUniform3fv'
。如何以满足std::vector
函数的方式传递glUniform3fv
中的数据?
您应该使用
GLfloat
而不是 glm::vec3
,但无论如何都是这样:
for (int i = 0; i != 10; i++) {
GLint originsLoc = glGetUniformLocation(programID, "origins[i]");
glUniform3f(originsLoc, origins[i].x, origins[i].y, origins[i].z);
}