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
原文地址:https://www.cnblogs.com/wustlj/p/3138284.html