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

Pass data from std::vector to uniform array in glsl

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

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'。如何以满足 glUniform3fv 功能的方式传递 std::vector 中的数据?

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