1

在 NVIDIA 上使用“#version 330 core”,

通过使用 glBindAttribLocation(program, 0, "in_Vertex"); 输入顶点与“in vec4 in_Vertex;”一起使用。但是,我注意到客户端应用程序中没有 OGL 函数调用,它仍然有效。它似乎是“默认的第一个输入变量”。为什么?它应该被省略还是通过 glBindAttribLocation 显式连接到它?[根据标准,理想是什么?] 还有“in vec4 gl_Vertex;” 在规范将其称为已弃用并且着色器的编译器不会发出任何警告时工作。为什么?我本来希望它至少会发出警告。我猜最后一个问题可能是编译器(GLSL 编译器)中的一个错误,但第一个问题尤其令人费解。

4

1 回答 1

3
  1. 如果您不将属性绑定到位置,则 GL 将为您完成。它使用的位置未指定,但您碰巧具有相同的值。

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

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

于 2010-09-01T06:56:09.800 回答