c++ - glGetAttribLocation() 返回 -1 但变量是统一的,如何解决?

标签 c++ opengl

这是我的着色器“triangles.vert”:

#version 430 core
layout(location = 0) in vec4 vPosition;
layout(location = 1) in vec4 vColor;
uniform mat4 vRota;

out vec4 color;

void main()
{
    color = vColor;
    gl_Position = vRota * vPosition;
}

这是 C++ 源代码的片段:

ShaderInfo shaders[] = 
{
    { GL_VERTEX_SHADER, "triangles.vert" },
    { GL_FRAGMENT_SHADER, "triangles.frag" },
    { GL_NONE, NULL }
};

GLuint program = LoadShaders(shaders);
glUseProgram(program);

//...

int vRota_loc = glGetAttribLocation(program, "vRota");

if (vRota_loc == -1)
{
    cout << "No uniform match for 'vRota'" << endl;
}

它返回-1,但我不知道为什么。

我在着色器中做错了什么吗?

ps LoadShaders() 是编译链接shader程序的函数。我正在练习的一本书将其作为源文件给出。所以我想不会有错误。

最佳答案

glGetAttribLocation 用于顶点属性,即顶点着色器中的in 变量(例如vPosition)。您需要 glGetUniformLocation

关于c++ - glGetAttribLocation() 返回 -1 但变量是统一的,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677239/

相关文章:

c++ - OpenGL glBegin ... glEnd

opengl - 查看玩家正在看什么 "block"

c++ - 应用世界变换

c++ - 使用带有指针值的 cout 时出错

c++ - C++ 中容器内过度对齐的结构和枚举之间的差异

c++ - 关于std::move()在成员重载中的使用问题

c++ - 以下代码中 glTransalatef 和 glScalef 的输入是什么?怎么运行的?

c++ - 如何使 C++ 中的值未定义?

c++ - 运行算法 PCA(主成分分析)后到底发生了什么

opengl - OpenGL-在屏幕上绘制像素?