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

问题描述 投票:0回答:1

我在着色器中有一套制服,如下所示:

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
中的数据?

c++ opengl glsl glm-math
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.