Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将数据从std::vector传递到glsl中的统一数组_C++_Opengl_Glsl_Glm Math - Fatal编程技术网

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())