我假设这将是“未定义”的那些东西之一,但我似乎无法从Google中找到具体的答案。使用布局限定符时,未缓冲顶点属性的OpenGL默认值
让我们在我的顶点着色器说我有:
layout(location = 0) in vec3 vPosition;
layout(location = 1) in vec3 vNormal;
layout(location = 2) in vec4 vColour;
但并没有什么缓冲,以地点2 glEnableVertexAttribArray()或glVertexAttribPointer()。我能期望价值是什么特别的吗?
我假设一个vec4它将沿{0,0,0,0},{0,0,0,1}或{1,1,1,1}行,但在我的情况是{0,0,1,1}。
当我先前使用glBindAttribLocation()来指定的位置,它默认为{1,1,1,1},用3个不同的操作系统4台不同的机器(Ubuntu的12.04,窗口7,和Ubuntu 10.04)。
跨机器假设值为{0,0,1,1}是否安全?或者这只是一个巧合?
所以我已经为特定的位置编号设置了glDisableVertexAttribArray(),但它仍然在着色器中被读为{0,0,1,1}。我正在使用VAO,所以我只拨打一次电话。我应该在我的glDrawElements()调用之前禁用它们吗? – kbirk
@Pondwater:如果VAO禁用它,则禁用它。您不必再次禁用它。另外,我做了一个补充答案。 –
啊,这是有道理的!谢谢你的澄清! – kbirk