glUniform3fv 无法正常工作 OpenGL

glUniform3fv not working OpenGL

本文关键字:工作 OpenGL 常工作 glUniform3fv      更新时间:2023-10-16

我正在用OpenGL写一段代码。我在尝试编译时收到以下错误消息:

MyGLWidget.cpp: In member function ‘virtual void MyGLWidget::initializeGL()’:
MyGLWidget.cpp:30:38: error: cannot convert ‘glm::vec3 {aka glm::tvec3<float, (glm::precision)0u>}’ to ‘const GLfloat* {aka const float*}’ in argument passing
MyGLWidget.cpp:31:39: error: cannot convert ‘glm::vec3 {aka glm::tvec3<float, (glm::precision)0u>}’ to ‘const GLfloat* {aka const float*}’ in argument passing

我在MyGLWidget.h中声明了这些位置,如下所示:

    GLuint llumLoc, focusLoc;

并在MyGLWidget中初始化它们.cpp为:

  llumLoc = glGetUniformLocation (program->programId(), "llumAmbient");
  focusLoc = glGetUniformLocation (program->programId(), "posFocus");

"llumAmbient"和"posFocus"是我的顶点着色器中的统一:

uniform vec3 llumAmbient;
uniform vec3 posFocus;

我在尝试在MyGLWidget中调用以下代码时收到提到的错误消息::初始化GL

glUniform3fv(llumLoc, 1, glm::vec3(0.2));
glUniform3fv(focusLoc, 1, glm::vec3(1.0));

显然,我已经尝试遵循 www.opengl.org 和 glm.g-truc.net/0.9.2/api/a00001.html 的文档,但我就是看不出这段代码有什么问题......

实际上,我今天才发现有一种更干净、更直接的方法。只是:

glUniform3fv(focusLoc, 1, &v[0]);

无需导入value_ptr

你需要提供一个指向向量的指针,而不是向量本身。例如:

glm::vec3 v(1.0f);
glUniform3fv(focusLoc, 1, glm::value_ptr(&v[0]));