OpenGL ES Programming Guide(2)

本文是苹果官方文档的翻译,由于本人水平有限,文中难免有错漏之处,请批评指正。原文链接

构建OpenGL ES iOS应用程序清单

OpenGL ES规范定义了一个平台中立的API,它使用GPU硬件渲染图形。 实现了OpenGL ES的平台需要提供执行OpenGL ES命令的渲染上下文、用于保存渲染结果的帧缓冲区以及呈现帧缓冲区内容的一个或多个渲染目的地(多指屏幕)。 在iOS中,EAGLContext类实现了一个渲染上下文,iOS仅提供一种类型的帧缓冲区,使用OpenGL ES帧缓冲区对象,GLKViewCAEAGLLayer类实现渲染目标。
在iOS中构建OpenGL ES应用程序需要注意一下几点,其中一些对于OpenGL ES编程是通用的,其中一些是特定于iOS的。 按照此清单和下面的详细部分开始编程吧。

1. 确定哪个版本的OpenGL ES适合您的应用程序,并创建一个OpenGL ES上下文。
2. 在运行时验证设备是否支持你要使用的OpenGL ES功能。
3. 选择在哪里渲染你的OpenGL ES内容。
4. 确保的应用在iOS上可以正常运行。
5. 实现您的渲染引擎。
6. 使用Xcode和Instruments调试您的OpenGL ES应用,并调整它以获得最佳性能。

选择支持的OpenGL ES版本

决定您的应用程序是否应该支持OpenGL ES 3.0,OpenGL ES 2.0,OpenGL ES 1.1或多个版本。

OpenGL ES 3.0是iOS 7中的新功能。它增加了许多新的特性,使用更高性能、更通用GPU计算技术,实现了更
复杂的视觉效果,这些效果以前只能在桌面级硬件以及游戏中实现。
OpenGL ES 2.0是iOS设备的标准配置文件,具有基于可编程着色器的可配置图形管线。
OpenGL ES 1.1仅提供基本的固定功能图形管线,主要用于向后兼容其他的iOS版本。

您应该确定一个或几个与你的应用特性最相关的OpenGL ES版本,要了解有关iOS设备OpenGL ES功能的更多信息,请阅读iOS设备兼容性参考
要为您打算支持的OpenGL ES版本创建上下文,请阅读配置OpenGL ES上下文。要了解怎样选择OpenGL ES版本与你在应用程序中使用的渲染算法相关,请参阅OpenGL ES版本和渲染器架构

Verifying OpenGL ES Capabilities

iOS设备兼容性参考汇总了可用于iOS设备的功能和扩展。但是,为了让应用程序尽可能地运行多种设备和iOS版本上,您的应用程序应始终在运行时查询OpenGL ES实现的功能。
要决定实现特定的限制,例如最大纹理大小或顶点属性的最大数量,请使用glGet函数通过相应令牌查询(例如,gl.h头文件中的MAX_TEXTURE_SIZE或MAX_VERTEX_ATTRIBS属性)。
要检查OpenGL ES 3.0扩展,请使用glGetIntegerv和glGetStringi函数,如以下代码所示:

BOOL CheckForExtension(NSString *searchName) {
    //Create a set containing all extension names.
    //For better performance, create the set only once and cache it for future use.
    int max = 0;
    glGetIntegerv(GL_NUM_EXTENSIONS, &max);
    NSMutableSet *extensions = [NSMutableSet set];
    for (int i = 0; i < max; i++) {
        [extensions addObject: @((char *)glGetStringi(GL_EXTENSIONS, i))];
    }
    return [extensions containsObject: searchName];
}

要检查OpenGL ES1.1和2.0的扩展,可以调用glGetString(GL_EXTENSIONS)获取所有扩展的列表。

选择渲染目的地

在iOS中,帧缓冲区对象存储绘图命令的结果。(iOS不实现窗口系统提供的帧缓冲区。)你可以通过多种方式使用帧缓冲区对象的内容:

  1. GLKit框架提供了一个视图,它绘制了OpenGL ES内容并管理自己的帧缓冲区对象,以及支持动画化OpenGL ES内容的视图控制器。使用这些类创建全屏视图或将OpenGL ES内容适用于UIKit视图层次结构。要了解这些类,请阅读使用OpenGL ES和GLKit绘图
  2. CAEAGLLayer类提供了一种绘制OpenGL ES内容作为Core Animation组合图层一部分的方法。使用此类时必须创建自己的帧缓冲区对象。
  3. 与任何OpenGL ES实现一样,您还可以使用帧缓冲区进行屏幕外图形处理或渲染到图形管线中其他位置的纹理。使用OpenGL ES 3.0,可以在渲染算法中使用屏幕外缓冲区,这些算法可以利用多个渲染目标。

要了解如何渲染到屏幕外缓冲区,纹理或核心动画层,请阅读绘图到其他渲染区域

与iOS集成

iOS应用程序默认情况下支持多任务处理,但在OpenGL ES应用程序中正确处理此功能需要额外进行思考。 OpenGL ES的不当使用可能导致您的应用程序在后台被系统结束。
许多iOS设备包含高分辨率显示器,因此您的应用程序应支持多种显示尺寸和分辨率。
要支持这些和其他iOS功能,请阅读多任务,高分辨率和其他iOS功能

实现渲染引擎

设计OpenGL ES绘图代码有许多可能的策略,其全部细节超出了本文档的讨论范围。渲染引擎设计的许多方面对OpenGL和OpenGL ES的实现都是通用的。
要了解iOS设备重要的设计注意事项,请阅读OpenGL ES设计指南并发和OpenGL ES

调试和分析

Xcode和Instruments为您的应用程序提供了许多用于跟踪渲染问题和分析OpenGL ES性能的工具。
要了解有关解决问题并提高OpenGL ES应用程序性能的更多信息,请参阅调整OpenGL ES应用程序

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

推荐阅读更多精彩内容