我在着色器中有这样的制服:
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);
}