OpenGL中关于顶点着色器和核心轮廓330上的输入顶点的特殊行为

时间:2010-09-01 02:21:06

标签: opengl opengl-3

在NVIDIA上使用'#version 330 core',

使用glBindAttribLocation(program,0,“in_Vertex”);输入顶点使用“in vec4 in_Vertex;”。但是,我注意到在客户端应用程序中没有OGL函数调用,它仍然有效。它似乎是'默认的第一个输入变量'。为什么?它应该被省略还是通过glBindAttribLocation显式连接到它? [符合标准的理想是什么?]另外“在vec4 gl_Vertex中”当规范调用它不推荐使用时,着色器的编译器不会发出任何警告。为什么?我原以为它至少会发出警告。我想最后一个可能是编译器中的错误(GLSL编译器),但第一个问题尤其令人费解。

1 个答案:

答案 0 :(得分:3)

  1. 如果您没有将属性绑定到某个位置,GL将为您执行此操作。它使用的位置未指定,但您碰巧具有相同的值。

    • 您可以询问GL使用glGetAttribLocation
    • 选择的位置
    • 即使没有指定,我也看到实现选择按照着色器的顺序绑定位置。首先是0,第二个是1,......
  2. 该标准使这两个选项保持打开状态,因为每个选项都有有效的用例。

  3. 至于弃用,nvidia明确表示他们贬值是错误的决定。最后,有人必须编写代码来发出警告......所以即使他们应该这样做,他们也不会发出警告也就不足为奇了。