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(bool compactAliasing, unsigned int numTextureUnits)
{

本文介绍了OpenGL在调用glDrawElements或glDrawArrays时如何使用默认着色器。默认顶点着色器利用gl_Vertex处理顶点,片段着色器使用gl_Color处理颜色。gl_Vertex的索引为0,gl_Color的索引为2,而gl_Normal的索引为1。OpenGL ES 3.0至少支持16个顶点属性,具体数量可通过GL_MAX_VERTEX_ATTRIBS查询。文中也提及了osg中设置顶点属性索引的方法。
最低0.47元/天 解锁文章
11






