1.1 简介
OpenGL是一套多功能开放标准库,用于处理可视化2D和3D数据。OpenGL可以将调用函数转换成图形处理命令并传送给底层图形硬件,因此OpenGL的绘制效率非常快。
OpenGL ES 是OpenGL的简化版本,是以手持和移动设备为目标的高级3D图形图像API,可以直接操作GPU硬件。其苹果官方文档描述如下:
OpenGL ES消除了一些OpenGL中移动端用不到的冗余功能,是目前主流的智能手机图形API,目前支持的平台包括:iOS、Android、BlackBerry、bada、Linux、Windows等。
1.2 OpenGL/OpenGL ES渲染管线及流程
1.2.1 渲染架构
如图所示,应用程序代码通过OpenGL ES Client准备好图元信息(这一部分由CPU完成),将数据传递给OpenGL ES Server进行图像图像的渲染(这一部分由GPU完成)。
有三个通道传递数据给着色器式:Attribute(参数属性)、Uniform(统一值)、Texture Data(采样器)
1.2.2 着色器业务
着色器本质上是一段程序代码:
在OpenGL/OpenGL ES中,开发者所能直接编程的着色器只有顶点着色器和片元着色器,其它着色器不能由开发者直接编程,因此这里只介绍顶点着色器和片元着色器业务。
1、 顶点着色器输入数据是顶点数组提供的每个顶点的数据,主要包括以下业务:
2、片元着色器的输入数据来自光栅化后的顶点着色器输出,需要注意的是顶点着色器后并不是片元着色器,而是要经过图元装配、光栅化、裁剪等过程。片元着色器的主要包括以下业务:
1.2.3 渲染管线流程
如图所示是苹果官方文档中描述的OpenGL ES渲染流程,主要包括以下几步:
1、顶点着色器进行旋转、平移、缩放的矩阵变换,以及对光照进行设置,之后输出数据
2、片元着色器接收到数据后,进行颜色计算和纹理获取,并进行纹理和颜色的填充
3、逐片段处理,这里部分包括像素归属测试、裁剪测试、深度测试、混合等操作
1.3 EGL
OpenGL ES API没有提供如何创建渲染上下文或者上下文如何链接到原生窗口。EGL是渲染API和原生窗口系统之间的接口,比如OpenGL ES和各个平台。iOS系统是唯一支持OpenGL ES但不支持EGL的平台,因为苹果提供了一套自己的EGL API实现,称为EAGL。这有些类似与我们日常开发中对第三方库的二次封装,OpenGL/OpenGL ES对于苹果来说就是他们的第三方库。
二、GLKit简介
GLKit 框架的设计⽬目标是为了了简化基于OpenGL / OpenGL ES 的应⽤用开发. 。它的出现 加快OpenGL ES或OpenGL应⽤程序开发。使⽤数学库,背景纹理加载,预先创建的着 ⾊器效果,以及标准视图和视图控制器来实现渲染循环。
GLKit框架提供了功能和类,可以减少创建新的基于着色器的应⽤用程序所需的⼯工作量量,或者⽀持依赖早期版本的OpenGL ES或OpenGL提供的固定函数顶点或片段处理理的现有应用程序。
GLKit提供的功能:
GLKit提供的类及接口:
三、总结
1、何为OpenGL ES?
OpenGL ES是OpenGL 的子集,提供了一个以移动设备和嵌入式设备为目标的图形处理API.
2、何为EGL?
一个连接OpenGL与原生窗口间的接口,iOS系统不支持EGL,但是有一套自己的实现,成为EAGL。
3、何为GLKit?
苹果对OpenGL ES进行的面向对象的封装,极大简化了OpenGL/OpenGL ES的开发。
本文分享自 HelloCoder全栈小集 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!