调用后glVertexAttribPointer(GLuint index, ...)
默认情况下,顶点属性被禁用为 docs说
By default, all client-side capabilities are disabled, including all generic vertex attribute arrays.
为什么我们必须使用额外的功能启用它?有人可以说出一个案例,这在哪些地方有用?
在研究时,我了解到以下内容:
layout(location = x)
GLSL 中的限定符或 glBindAttribLocation
我们可以明确地设置位置,而不是让 OpenGL 生成它。但这不是我的问题的重点。 glEnableVertexAttribArray
不能用于使用多个着色器绘制一个 VAO。当使用程序对象查询属性位置时,人们会假设位置是特定于着色器的;那么人们会期望,我们可以在运行正确的着色器之前启用正确的属性位置。但是测试这个,我注意到,一个位置值可以在不同的着色器中出现多次;此外,输出看起来是错误的。如果您想查看代码,请询问。 最佳答案
该设置完全有意义。启用和禁用它都有非常有效的用例。
入口点的名称已经给出了一个强有力的提示。请注意 Array
参加 glEnableVertexAttribArray()
.此调用不会“启用该属性”。它允许使用来自 的顶点属性值。阵列 , 意义:
属性的当前值是通过调用
glVertexAttrib[1234]f()
来设置的。家庭。您希望在下一次绘制调用中为所有顶点使用相同属性值的用例的典型代码序列是:glDisableVertexAttribArray(loc);
glVertexAttrib4f(loc, colR, colG, colB, colA);
与每个顶点从数组中获取自己的属性值的情况相比:
glEnableVertexAttribArray(loc);
glVertexAttribPointer(loc, ...);
现在,从数组中获取属性肯定更为常见。所以你可能会争辩说默认值对于现代 OpenGL 的使用来说是不幸的。但是设置和更改它的调用绝对仍然非常有用。
关于opengl - OpenGL 中 `glEnableVertexAttribArray(GLuint index)` 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39264296/