OpenGL ES Programming Guide(1)

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关系图
译者:
由上图可知,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应用程序。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容