OpenGL ES 3.0实现了具有可编程着色功能的图形管线,由两个规范组成:
OpenGL ES 3.0 API规范 和 OpenGL ES着色器语言3.0规范(OpenGL ES SL)。
顶点着色器示例:
顶点着色器取得一个位置及相关的颜色数据作为输入属性,用一个4×4矩阵变换位置,并输出变换后的位置和颜色。
#version 300 es
uniform mat4 u_mvpMatrix;// matrix to convert a_position
// from model space to normalized device space
// attributes input to the vertex shader
int vec4 a_position;// position value
int vec4 a_color;// input vertex color
// output of the vertex shader - input to fragment shader
out vec4 v_color;// output vertex color
void main() {
v_color = a_color;
gl_Position = u_mvpMatrix * a_position;
}
统一变量u_mvpMatrix,它存储组合的模型视图和投影矩阵。
顶点属性a_position是输入顶点位置属性,a_color是输入顶点颜色属性。
输出变量v_color,用于存储描述每个顶点颜色的顶点着色器属性。
内建变量gl_position是自动声明的,着色器必须将变换后的位置写入这个变量。
片段着色器的顶点有一个单一入口点,作为主函数main():
读入顶点属性输入a_color,并将其写入顶点输出颜色v_color。
变换后的顶点位置写入gl_Position输出。
片段着色器示例:
#version 300 es
precision mediump float;
int vec4 v_color; // input vertex color from vertex shader
out vec4 fragColor; // output fragment color
void main() {
fragColor = v_color;
}
EGL:
EGL是Khronos渲染API(如OpenGL ES)和原生窗口系统之间的接口;在实现OpenGL ES时,没有提供EGL的硬性需求。
任何OpenGL ES应用程序都必须在开始渲染之前使用EGL执行如下任务:
EGL API实现上述功能以及像电源管理、在一个进程中支持多个渲染上下文、在一个进程中跨渲染上下文共享对象(如纹理或者顶点缓冲区)这样的附加功能,并实现获得给定实现支持的EGL或者OpenGL ES扩展功能函数指针的机制。EGL规范最新版本是EGL 15。