开放图形库(OpenGL)用于可视化2D/3D数据。 它是一个多功能开放标准图形库,他支持2D/3D数字内容创建、机械和建筑设计、虚拟原型设计、飞行模拟,视频游戏等应用程序。 您可以使用OpenGL配置3D图形管道并向其提交数据。 顶点被变换和点亮,组合成图元,并光栅化以创建2D图像。 OpenGL旨在将函数调用转换为底层图形硬件可接受的图形命令。 因为底层硬件专用于处理图形命令,所以OpenGL绘图通常非常快。
OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,它去除了冗余功能,提供了一个既易于学习又更易于在移动图形硬件中实现的库。
OpenGL ES允许应用程序利用底层图形处理器的强大功能。 iOS设备上的GPU可以执行复杂的2D和3D绘图,以及图像中每个像素的复杂着色计算。 如果您的应用程序需要直接和全面的使用GPU硬件,那么您应该使用OpenGL ES。 OpenGL ES的典型应用包括3D视频游戏和3D模拟。
OpenGL ES是一种底层的以硬件为重点的API。 虽然它提供了最强大和最灵活的图形处理工具,但它也具有陡峭的学习曲线,并且它对应用程序的整体设计也会产生重大影响。 对于需要高性能图形处理以用于某些专业用途的应用程序,iOS提供了几个更高级别的框架:
由于OpenGL ES是基于C的API,因此它非常便携且受到广泛的支持。 作为C API,它与Objective-C Cocoa Touch应用程序无缝集成。 OpenGL ES规范没有定义窗口层; 相反,宿主操作系统必须提供函数用来创建一个用来接受绘图命令的OpenGL ES渲染上下文和一个用来写入绘图结果的帧缓冲区。因此,在iOS上使用OpenGL ES需要使用iOS提供的类来设置和呈现绘图表面,然后再使用平台独立的API来渲染内容。
相关章节: Checklist for Building OpenGL ES Apps for iOS, Configuring OpenGL ES Contexts
UIKit框架定义的View和View Controller 控制着iOS上可视内容的呈现。 GLKit框架提供了这些类的OpenGL ES版本。 在开发OpenGL ES应用程序时,可以使用 GLKView 对象来渲染OpenGL ES的内容。 您还可以使用 GLKViewController 对象来管理视图并支持其内容的动画。
相关章节: Drawing with OpenGL ES and GLKit
除了将内容绘制到整个屏幕或视图层次结构的一部分之外,您还可以将OpenGL ES帧缓冲区对象用于其他渲染策略。 iOS实现了标准的OpenGL ES帧缓冲对象,您可以将其渲染到离屏缓冲区或纹理,以便在OpenGL ES场景中的其他地方使用。 此外,iOS上的OpenGL ES支持渲染到 Core Animation layer(CAEAGLLayer类),然后您可以将其与其他图层组合以构建应用程序用户界面或其他可视化显示。
相关章节: Drawing to Other Rendering Destinations
图形处理器是针对图形操作优化的并行设备。 要在应用中获得出色的性能,您必须仔细的设计应用程序中向OpenGL ES提供数据和命令的部分,以便图形硬件与您的应用程序可以并行运行。 调制不佳的应用程序会强制CPU或GPU等待对方完成处理命令。
您应该使您的应用程序能够有效地使用OpenGL ES API。 完成应用程序构建后,可以使用Instruments调整应用程序的性能。 如果您的应用程序在OpenGL ES中存在瓶颈,请使用本指南中提供的信息来优化应用程序的性能。
Xcode提供的工具可帮助您提高OpenGL ES应用程序的性能。
相关章节: OpenGL ES Design Guidelines, Best Practices for Working with Vertex Data,Best Practices for Working with Texture Data,Best Practices for Shaders,Tuning Your OpenGL ES App
在后台运行的应用程序可能无法调用OpenGL ES的功能。 如果您的应用程序在后台运行时访问图形处理器,它将自动由iOS终止。 为了避免这种情况,您的应用程序应该在切换到后台之前刷新先前提交给OpenGL ES的任何待处理命令,并避免在将切换到前台之前调用OpenGL ES。
相关章节: Multitasking, High Resolution, and Other iOS Features
利用应用程序的并发性可以帮助提高应用程序的性能。 如果您打算为OpenGL ES应用程序添加并发功能,则必须确保它不会同时从两个不同的线程访问相同的context。
相关章节: Concurrency and OpenGL ES
从阅读前三章开始: Checklist for Building OpenGL ES Apps for iOS, Configuring OpenGL ES Contexts, Drawing with OpenGL ES and GLKit。这些章节概述了OpenGL ES如何集成到iOS中,以及在iOS设备上启动和运行首个OpenGL ES应用程序所需的所有详细信息。
如果你熟悉了iOS中 OpenGL ES 的使用,阅读 Drawing to Other Rendering Destinations 和 Multitasking, High Resolution, and Other iOS Features 以获取重要的平台特性指南。熟悉iOS5.0之前版本中使用OpenGL ES的开发人员应该学习使用OpenGL ES和GLKit绘图,了解有关简化OpenGL ES开发的新功能的详细信息。
最后,阅读 OpenGL ES Design Guidelines 和 Tuning Your OpenGL ES App 以及剩下的章节以深入了解如何设计高效的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 is an open standard defined by the Khronos Group. For more information about the OpenGL ES standard, please consult their web page at http://www.khronos.org/opengles/.