OpenGL shader

2020-07-08  本文已影响0人  FireStroy

EGL (Embedded Graphics Library )

EGL的主要功能如下:

  1. 和本地窗⼝系统(native windowing system)通讯;
  2. 查询可⽤的配置;
  3. 创建OpenGL ES可用的“绘图表面”(drawing surface);
  4. 同步不同类别的API之间的渲染,⽐如在OpenGL ES和OpenVG之间同步,或者在OpenGL和本地窗⼝口的绘图命令之间;
  5. 管理“渲染资源”,⽐如纹理映射(rendering map)。

GLSL语法基本

向量数据类型

向量数据类型.png

矩阵数据类型 mat列x行

矩阵数据类型

变量存储限定符


变量存储限定符

三种数据修饰类型

uniform mat4 viewProMatrix;
attribute vec4 position;
attribute vec4 color;
attribute vec4 texCoord;
varying lowp vec2 varyTextCoord

着⾊器与程序

着色器创建

创建和编译:

GLuint glCreateShader(GLenum type);
type创建着色器的类型:GL_VERTEX_SHADER 或者
GL_FRAGMENT_SHADER

返回值是一个着色器句柄

void glDeleteShader(GLuint shader);
shader — 删除着色器对象句柄
void glShaderSource(GLuint shader , GLSizei count ,const GLChar * const *string, const GLint *length);
shader — 指向着色器的句柄
count — 着色器源字符串数量,着色器可以由多个源字符串组成 但只有一个main函数.
string — 指向保存数量的count的着色器源字符串的数组指针。
length — 指向保存每个着色器字符串大小且元素数量为count的整数数组指针。

void glCompileShader(GLuint shader);

void glGetShaderiv(GLuint shader , GLenum pname , GLint *params );
pname获取的参数信息,可以为: GL_COMPILE_STATUS/GL_DELETE_STATUS/GL_INF O_LOG_LENGTH/GL_SHADER_SOURCE_LENGTH/ GL_SHADER_TYPE
params — 指向查询结果的整数存储位置的指针
void glGetShaderInfolog(GLuint shader , GLSizei maxLength, GLSizei *length , GLChar *infoLog);
shader — 需要获取信息⽇志的着⾊器对象句柄
maxLength— 保存信息⽇志的缓存区⼤小
length — 写⼊入的信息日志的⻓度(减去null 终⽌止符); 如果不需要知道⻓度. 这个参数可以为Null infoLog — 指向保存信息⽇志的字符缓存区的指针.

创建与连接程序:

GLUint glCreateProgram( )
创建一个程序对象
返回值: 返回一个执⾏新程序对象的句柄
void glDeleteProgram( GLuint program )
program : 指向需要删除的程序对象句句柄
//着⾊器与程序连接/附着
void glAttachShader( GLuint program , GLuint shader );
program : 指向程序对象的句柄
shader : 指向程序连接的着⾊器对象的句柄
//断开连接
void glDetachShader(GLuint program);
program : 指向程序对象的句柄
shader : 指向程序断开连接的着⾊器对象句柄
glLinkProgram(GLuint program)
program: 指向程序对象句柄

链接程序之后, 需要检查链接是否成功. 你可以使用glGetProgramiv 检查链接状态:
void glGetProgramiv (GLuint program,GLenum pname, GLint *params);
program: 需要获取信息的程序对象句柄 pname : 获取信息的参数,可以是:
GL_ACTIVE_ATTRIBUTES GL_ACTIVE_ATTRIBUTES_MAX_LENGTH GL_ACTIVE_UNIFORM_BLOCK GL_ACTIVE_UNIFORM_BLOCK_MAX_LENGTH GL_ACTIVE_UNIFROMS GL_ACTIVE_UNIFORM_MAX_LENGTH GL_ATTACHED_SHADERS GL_DELETE_STATUS
GL_INFO_LOG_LENGTH
GL_LINK_STATUS GL_PROGRAM_BINARY_RETRIEVABLE_HINT GL_TRANSFORM_FEEDBACK_BUFFER_MODE GL_TRANSFORM_FEEDBACK_VARYINGS GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH GL_VALIDATE_STATUS
params : 指向查询结果整数存储位置的指
从程序信息⽇志中获取信息
void glGetPorgramInfoLog( GLuint program ,GLSizei maxLength, GLSizei *length , GLChar *infoLog )
program : 指向需要获取信息的程序对象句柄
maxLength : 存储信息⽇志的缓存区⼤小
length : 写⼊的信息⽇志⻓度(减去null 终⽌止符),如果不需要知道⻓度,这个参数可以为Null. infoLog : 指向存储信息⽇志的字符缓存区的指针
void glUseProgram(GLuint program)
program: 设置为活动程序的程序对象句柄

流程总结:

  1. 创建⼀一个顶点着⾊色器器对象和⼀一个⽚片段着⾊色器器对象
  2. 将源代码链接到每个着⾊色器器对象
  3. 编译着⾊色器器对象
  4. 创建⼀一个程序对象
  5. 将编译后的着⾊色器器对象连接到程序对象
  6. 链接程序对象

顶点着⾊器输入:

  1. 着⾊器程序—描述顶点上执行操作的顶点着⾊器程序源代码/可执⾏行文件
  2. 顶点着⾊器输⼊入(属性) — ⽤顶点数组提供每个顶点的数据
  3. 统一变量(uniform)—顶点/⽚元着⾊器使⽤的不变数据
  4. 采样器—代表顶点着⾊器使⽤纹理的特殊统⼀一变量量类型
    输出:gl_Position gl_PointSize

顶点着⾊色器器 业务:

  1. 矩阵变换位置
  2. 计算光照公式⽣生成逐顶点颜⾊色
  3. ⽣生成/变换纹理理坐标

执⾏自定义计算,实施新的变换,照明或者传统的固定功能所不允许 的基于顶点的效果.
待续…

上一篇下一篇

猜你喜欢

热点阅读