请参阅“Explicit vs Automatic attribute location binding for OpenGL shaders”
如果我没有使用glVertexAttribPointer
显式绑定属性,将使用哪些默认位置?
我在哪里可以找到它的官方链接?
答案 0 :(得分:0)
您是否在询问如何将GLSL着色器中的通用属性分配给属性广告位(位置)?
如果您不自己动手,那么这是完全实现的定义。有些人将扫描顶点着色器并按字母顺序为它们分配位置,其他人将根据它们出现的顺序为它们分配插槽,但这些行为都不是必需的。它可以是完全随机的,并且每次运行程序时都会更改。
这就是为什么要么在链接之前将顶点属性显式绑定到某个位置,要么在之后查询该位置。
答案 1 :(得分:0)
我认为你可能会混淆几个不同的概念。您链接的问题是如何将位置分配给顶点着色器中的属性。 glBindAttribLocation()
或glGetAttribLocation()
用于此目的。
glVertexAttribPointer()
指定属性数据的来源,以及属性的某些相关状态(类型,步幅等)。它所使用的特定属性由其位置给出,该位置作为调用的第一个参数传递。
现在,如果您从未为某个属性调用glVertexAttribPointer()
,则可能会出现以下几种情况:
未为属性启用属性数组。如果从未为该属性调用glEnableVertexAttribArray()
或最后一次调用glDisableVertexAttribArray()
,则会发生这种情况。在这种情况下,将使用属性的当前值,该值是使用glVertexAttrib4f()
等调用设置的值,默认值为(0.0f, 0.0f, 0.0f, 1.0f)
。
如果启用了属性数组,则默认值对应于:
的调用glVertexAttribPointer(location, 4, GL_FLOAT, GL_FALSE, 0, NULL);
所有这些都可以在官方OpenGL规范文档中找到,可以在https://www.opengl.org/registry/访问。