GLSL初探

129 阅读2分钟

着色器与程序对象

使用着色器进行渲染操作,需要创建两个基本的对象。(着色器对象和程序对象),在获取对应的链接着色器对象一般会包括如下几个步骤。

1、创建一个顶点着色器对象和一个片元着色器对象
// 创建一个着色器
GLuint glCreateShader(GLenum type);
参数:创建着色器的类型GL_VETTEX_SHADER或则GL_FRAME_SHADER  
2、将源代码连接到每个着色器对象
void glShaderSource(GLuint shader , GLSizei count ,const GLChar * const *string, const GLint *length)
参数1:shader 指向着色器对象的句柄
参数2:count 着⾊色器器源字符串串的数量量,着⾊色器器可以由多个源字符串串组成,但是每个着⾊色器器只有⼀一个main函数
参数3:指向保存数量量的count 的着⾊色器器源字符串串的数组指针
参数4:指向保存每个着⾊色器器字符串串⼤大⼩小且元素数量量为count 的整数数组指针
3、编译着色器对象
void glCompileShader(GLuint shader);
参数:需要编译的着色器句柄
4、创建一个程序对象
// 常见一个程序对象
GLUint glCreateProgeam()
5、将编译后的着色器对象链接到程序对象
// 着色器与程序链接	
void glAttachShader(GLuint program.GLuint shader)
参数1:program 指向程序对象的句柄。
参数2:shader 指向程链接对象的句柄
6、链接程序对象
// 链接程序
glLinkeProgram(GLuint program)

其他常用函数:

// 删除指定的程序对象
glDeleteProgram( GLuint program)
// 断开链接
glDetachShader(GLuint program)
// 监测链接程序是否成功
glGetProgramiv (GLuint program,GLenum pname, GLint *params)
// 从程序日志中获取信息
glGetPorgramInfoLog( GLuint program ,GLSizei maxLength, GLSizei *length , GLChar *infoLog)

常用数据类型

1、向量数据类型

vec2,vec3,vec4 (浮点向量)
ivec2,ivec3,ivec4 (整形向量)
uvec2,uvec3,uvec4 (无符号整型向量)
bvec2,bvec3,bvec4 (bool类型向量)

2、矩阵数据类型 (mat列x⾏)

mat2 (两行两列矩阵) mat3、mat4 ...(行列相等的矩阵)
mat2x3 (三行两列矩阵)

变量存储限定符

<none>  本地变量,外部不可访问
const   编译常量
in/varying  从前阶段传递过来的变量
out/attribute  传递到下一个处理阶段或者在一个函数中指定一个返回值
uniform   从客户端代码传递过来的变量,在顶点之间不做改变