将数据从std :: vector传递到glsl中的统一数组

时间:2015-05-04 20:10:36

标签: c++ opengl glsl glm-math

我在这样的着色器中有一件制服:

a A 1
2
3

和我的代码中的std :: vector如下:

uniform vec3 origins[10];

填充了十个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中的数据?

1 个答案:

答案 0 :(得分:1)

你应该使用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);
}