Introduction
本文是苹果官方文档的翻译,由于本人水平有限,文中难免有错漏之处,请批评指正。原文链接
关于OpenGL ES
开放图形库(Open Graphics Library:OpenGL) 被用来展示2D和3D数据,它是一个多用途的开放标准图形库,支持2D、3D数字内容的创建,机械和建筑设计、虚拟原型、飞行模拟、视频游戏等多种应用。您可以使用OpenGL配置3D图形管线并提交数据。顶点被转换和点亮,组成原始图像,进行光栅化后生成2D图像。OpenGL旨在将函数调用转换为可发送到底层图形硬件的图形命令,该底层硬件专门用于处理图形命令,因此OpenGL绘图通常非常快。
OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本(专门为嵌入式系统设计,在移动端操作系统中应用广泛),该版本消除了冗余功能,提供了更易学习且易于在移动图形硬件中实现的库。
译者:
由上图可知,CPU、GPU之间的关系,类似于C/S模式,其中CPU相当于Client,GPU相当于Server,当应用需
要图形的绘制以及渲染时,它会通过OpenGL ES框架,向GPU传输相应绘制指令(类似于client发起的请求),
GPU收到指令后会进行相应操作(类似于Server对请求进行响应),最终将渲染结果在屏幕上绘制出来。
概览
OpenGL ES允许应用程序利用底层图形处理器的功能。 iOS设备上的GPU可以执行复杂的2D和3D绘图,并对最终图像中的每个像素进行复杂的阴影计算。 如果应用程序的设计需求需要尽可能直接全面的访问GPU硬件,那么你应该使用OpenGL ES。 OpenGL ES的典型客户端包括可以展现3D图形的视频游戏和模拟游戏。
OpenGL ES是一个底层的,以硬件为重点的API。尽管它提供了强大和灵活的图形处理工具,但也具有陡峭的学习曲线,并且会对您应用程序的整体设计有重大影响。对于那些需要较高图形性能的专业应用,iOS提供了几个更高层次的框架:
- Sprite Kit框架提供了一个为创建2D游戏而优化的硬件加速动画系统。(请参见Sprite Kit编程指南)
- Core Image框架为静态的物体以及视频图像提供实时的过滤和分析。请参阅核心图像编程指南
- 核心动画为所有的的iOS应用提供了硬件加速的图形动画渲染设施,以及一个简单的声明式编程模型,使得实现复杂的用户界面动画变得更加简单。请参阅核心动画编程指南
- 您可以使用UIKit框架中的功能,向Cocoa Touch用户界面添加基于物理的动画和其他特效。
OpenGL ES是实现在iOS上的一个中立平台API
因为OpenGL ES是一个基于C的API,它非常轻便并得到广泛的支持。 作为一个C API,它可以与Objective-C Cocoa Touch应用无缝集成。 OpenGL ES规范没有定义窗口层,相反,托管操作系统必须提供函数来创建可以接受命令的OpenGL ES渲染上下文以及可写入任何绘图命令的结果的帧缓冲区。 在iOS上使用OpenGL ES需要使用iOS类来设置和呈现绘画层,并使用平台中立的API来渲染其中的内容。
相关章节:构建用于iOS的OpenGL ES应用程序清单,配置OpenGL ES上下文
GLKit提供绘图表面和动画支持
UIKit框架定义的视图和视图控制器控制着iOS上视觉内容的呈现。 GLKit框架提供了这些类的OpenGL ES感知版本。 开发OpenGL ES应用程序时,您可以使用GLKView对象来呈现OpenGL ES内容。 您还可以使用GLKViewController对象来管理视图并支持可动画化的内容。
相关章节:用OpenGL ES和GLKit绘图
iOS支持额外的渲染目标
除了绘制内容填充整个屏幕或视图层次结构的某一部分外,您还可以使用OpenGL ES的帧缓冲对象进行其他渲染策略。 iOS实现了标准的OpenGL ES帧缓冲对象,您也可以将其用于渲染到屏幕外的缓冲区或者纹理,以便在OpenGL ES场景中的其他位置使用。 此外,iOS上的OpenGL ES支持渲染到Core Animation层(CAEAGLLayer类),然后您可以将其与其他图层相结合,构建用户界面或其他视觉显示。
相关章节:绘制其他渲染区域
应用程序需要额外的性能调优
图形处理器是针对图形操作优化的并行设备。为了在您的应用程序中获得出色的性能,您必须仔细设计应用程序以将数据和命令提供给OpenGL ES,以使图形硬件与您的应用程序并行运行。一个协调性差的应用程序会强制CPU或GPU等待另一个完成处理命令。
您应该以高效地使用OpenGL ES API的方式来设计您的应用,完成应用制作后,使用Instruments来调整应用性能。如果您的应用在OpenGL ES中出现瓶颈,请使用本指南中提供的信息来优化应用性能。
Xcode提供了帮助您提高OpenGL ES程序性能的工具。
相关章节:OpenGL ES设计指南,使用顶点数据的最佳实践,使用纹理数据的最佳实践,着色器的最佳实践,调整您的OpenGL ES应用程序
OpenGL ES可能不会在后台运行的应用中使用
在后台运行的应用可能不会调用OpenGL ES函数。如果您的应用在后台访问图形处理器,iOS会自动终止它。为避免这种情况,您的应用应该先刷新之前提交给OpenGL ES的命令,然后才能移动到后台,并避免调用OpenGL ES,直到它移回前台。
相关章节:多任务,高分辨率和其他iOS功能
OpenGL ES为多线程应用增加了额外限制
利用并发性设计应用程序对于改善应用的性能很有帮助。如果你打算在一个OpenGL ES的应用中使用并发,必须确保两个不同的线程无法同时访问同一个上下文。
相关章节:并发和OpenGL ES
如何使用本文档
首先阅读前三章:构建用于iOS的OpenGL ES应用程序的清单,配置OpenGL ES上下文,使用OpenGL ES和GLKit进行绘图。这些章节讲述了OpenGL ES如何整合到iOS中,以及在iOS设备上启动和运行第一个OpenGL ES应用程序所需的所有细节。
如果您熟悉在iOS中使用OpenGL ES的基础知识,请阅读绘制到其他渲染区和多任务、高分辨率、其他iOS功能,以获取重要的特定平台指南。熟悉在5.0之前的iOS版本中使用OpenGL ES的开发人员应该学习使用OpenGL ES和GLKit绘图,以获得有关简化OpenGL ES开发以及新功能的详细信息。
最后,阅读OpenGL ES设计指南,调整OpenGL ES应用以及以下章节,深入了解如何设计高效的OpenGL ES应用程序。
除非另有说明,本书中的OpenGL ES代码示例以OpenGL ES 3.0为标准。如果将它们用在其它的OpenGL ES版本,您可能需要改变列子中的代码。
先决条件
在尝试使用OpenGL ES之前,您应该已经熟悉了一般的iOS应用程序架构。 请参阅Start Developing iOS Apps Today。
本文档不是完整的教程或跨平台OpenGL ES API的参考。 要了解有关OpenGL ES的更多信息,请参阅以下参考。
也可以看看
OpenGL ES是Khronos集团定义的开源标准。 有关OpenGL ES标准的更多信息,请访问http://www.khronos.org/opengles/ 。
- Addison-Wesley发布的
OpenGL®ES 3.0编程指南
全面介绍了OpenGL ES的概念。 -
OpenGL®着色语言,第三版
,也由Addison-Wesley出版,提供了许多可用于OpenGL ES应用的着色算法。 您可能需要修改其中一些算法才能在移动图形处理器上高效运行。 - OpenGL ES API Registry是OpenGL ES规范的官方存储库,OpenGL ES着色语言规范以及OpenGL ES扩展的文档。
- OpenGL ES Framework Reference介绍了Apple将OpenGL ES集成到iOS中提供的平台特定功能和类。
- iOS Device Compatibility Reference提供了有关您的应用程序可用的硬件和软件功能的更详细信息。
- GLKit框架参考描述由Apple提供的一个框架,使用它我们可以更轻松地开发OpenGL ES 2.0和3.0应用程序。