opengl在调用glDrawElements或glDrawArrays进行绘制时,如果没有指定用户自定义的顶点、片段等着色器,opengl会为用户设置一个默认的着色器,类似于
顶点着色器
#version 330
void main()
{
}
片段着色器
#version 330
void main()
{
}
在顶点着色器中默认使用gl_Vertex绘制顶点。
在片段着色器中默认使用gl_Color绘制颜色。
gl_Vertex、gl_Color一般通过glVertexAttribPointer、glVertexAttrib*等传递数据。
gl_Vertex在着色器中的默认索引值为0,对应于layout(location=0)。
gl_Color的默认索引值为2。
此外还有:
gl_Normal的默认索引值为1。
顶点属性索引值的数量和GPU硬件有关系,所有 OpenGL ES 3.0 的实现必须至少支持16个vertex attribute,实际支持的个数可以通过GL_MAX_VERTEX_ATTRIBS查询
GLint maxVertexAttribs; // n will be >= 16
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
osg中是这样设置顶点属性索引默认值的
osg/State.cpp
void State::resetVertexAttributeAlias(b