C++ 将数据从std::vector传递到glsl中的统一数组
我有一个统一的着色器,如下所示:C++ 将数据从std::vector传递到glsl中的统一数组,c++,opengl,glsl,glm-math,C++,Opengl,Glsl,Glm Math,我有一个统一的着色器,如下所示: uniform vec3 origins[10]; std::vector<glm::vec3> origins; 代码中的std::vector如下: uniform vec3 origins[10]; std::vector<glm::vec3> origins; 可以,但无法编译。错误表示调用'glUniform3fv'没有匹配的函数。如何以满足glUniform3fv函数的方式在std::vector中传递数据 应该使用G
uniform vec3 origins[10];
std::vector<glm::vec3> origins;
代码中的std::vector如下:
uniform vec3 origins[10];
std::vector<glm::vec3> origins;
可以,但无法编译。错误表示调用'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);
}
“它不工作”…崩溃?没有画?有什么意想不到的东西画出来了吗?它不会编译。发布的代码应该编译吗?错误表示调用'glUniform3fv'没有匹配的函数。我用这些信息编辑了这个问题。你应该将指针投射到一个
常量GLfloat*
。如果没有强制转换,函数签名将不匹配。您还应该包括*完整的编译器输出。我猜实际的错误包括您遗漏的额外类型/签名信息,很遗憾。您使用的是哪个版本的OpenGL和GLSL?那么,如果您使用的是3.2+版本,那么您使用的是核心配置文件规范还是兼容性配置文件规范?您使用的是什么操作系统,您使用的是什么IDE编译器?谢谢您的回答,@cornstales为我指明了正确的方向。我最后做的是这样的,这也是有效的:glUniform3fv(originsLoc,origins.size(),reinterpret\u cast(trackbarrier->obstaclespopupnorms.data())