shader之attribute
用户定义的属性变量都是全局变量,与OpenGL应用程序传递给在OpenGL实现内部执行的顶点着色器的值相关联
1.获取位置索引
GLint glGetAttribLocation (GLuint program, const GLchar* name)
2.显式设置属性
void glBindAttribLocation (GLuint program, GLuint index, const GLchar* name)
必须在着色器程序被链接之前执行
3.设置属性
void glVertexAttrib{1234}f (GLuint indx, TYPE value)
void glVertexAttrib{1234}fv (GLuint indx, const GLfloat* values)
顶点着色器还可以利用定点数组:顶点属性变量的值可以存储在顶点数组中,并通过glDrawArrays(),glArrayElement()等函数进行更新
void glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
与其他类型的顶点数组一样,指定数组只是整个操作的一部分。每个客户端的数组都需要启用。
void glEnableVertexAttribArray (GLuint index)
void glDisableVertexAttribArray (GLuint index)
4.内置的属性输入变量
变量 | 类型 | 指定函数 | 描述 |
gl_Vertex | vec4 | glVertex | 顶点的全局空间坐标 |
gl_Color | vec4 | glColor | 主颜色值 |
gl_SecondaryColor | vec4 | glSecondaryColor | 辅助颜色值 |
gl_Normal | vec4 | glNormal | 光照法线 |
gl_MultiTexCoordn | vec4 | glMultiTexCoord(n,...) | 纹理单位n的纹理坐标,n的取值范围是0~7 |
gl_FogCoord | float | glFogCoord | 雾坐标 |
gl_VertexID | int | - | 自上次渲染调用开始,当前顶点的索引 |
gl_InstanceID | int |
glDrawArraysInstanced glDrawElementsInstanced |
相关图元的实例ID |