将数据从STD ::向量传递到GLSL中的均匀阵列

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

本文关键字:GLSL 阵列 数据 STD 向量      更新时间:2023-10-16

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

uniform vec3 origins[10];

和这样的代码中的std ::向量:

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);
}