OpenGL ES 框架详细解析(二) —— 关于OpenGL ES

版本记录

版本号 时间
V1.0 2017.09.28

前言

OpenGL ES是一个强大的图形库,是跨平台的图形API,属于OpenGL的一个简化版本。iOS系统可以利用OpenGL ES将图像数据直接送入到GPU进行渲染,这样避免了从CPU进行计算再送到显卡渲染带来的性能的高消耗,能带来来更好的视频效果和用户体验。接下来几篇就介绍下iOS 系统的 OpenGL ES框架。感兴趣的可以看上面几篇。
1. OpenGL ES 框架详细解析(一) —— 基本概览

关于OpenGL ES

可以参考参考文档

开放图形库(OpenGL)用于2D和3D数据的可视化。 它是一个多功能的开放标准图形库,支持2D和3D数字内容创建,机械和建筑设计,虚拟原型,飞行模拟,视频游戏等应用。 您可以使用OpenGL配置3D图形管道并提交数据。 顶点被变换和点亮,组装成图元,并进行光栅化以创建2D图像。 OpenGL旨在将函数调用转换为可发送到底层图形硬件的图形命令。 因为这个底层硬件专门用于处理图形命令,因此OpenGL绘图通常非常快。

用于嵌入式系统的OpenGL(OpenGL ES)是OpenGL的简化版本,可以消除冗余功能,从而为移动图形硬件提供更容易学习和更易于实现的库。


概览

OpenGL ES允许应用程序利用底层图形处理器的功能。 iOS设备上的GPU可以执行复杂的2D和3D绘图,以及最终图像中每个像素的复杂阴影计算。 您应该使用OpenGL ES,如果您的应用程序的设计要求调用可直接和全面访问GPU硬件。 OpenGL ES的典型客户端包括提供3D图形的视频游戏和模拟。

OpenGL ES是一个低级的,以硬件为重点的API。 虽然它提供了最强大和灵活的图形处理工具,但它也具有陡峭的学习曲线,对您的应用程序的整体设计有重大影响。 对于需要高性能图形用于更专业化应用的应用,iOS提供了几个更高级别的框架:

  • Sprite Kit框架提供了一个优化用于创建2D游戏的硬件加速动画系统。 (请参阅Sprite Kit Programming Guide。)
  • Core Image框架为静态和视频图像提供实时过滤和分析。 (见Core Image Programming Guide)
  • Core Animation为所有iOS应用程序提供硬件加速的图形渲染和动画基础设施,以及一个简单的声明式编程模型,使实现复杂的用户界面动画变得简单。 (见Core Animation Programming Guide
  • 您可以使用UIKit框架中的功能向Cocoa Touch用户界面添加基于物理的动画和其他特效。

1. OpenGL ES Is a Platform-Neutral API Implemented in iOS - OpenGL ES是iOS中实现的平台中立API

因为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

2. GLKit Provides a Drawing Surface and Animation Support - GLKit提供绘图表面和动画支持

UIKit框架定义的视图和视图控制器可以控制iOS上的视觉内容的呈现。 GLKit框架提供这些类的OpenGL ES感知版本。 当您开发OpenGL ES应用程序时,您可以使用GLKView对象来呈现OpenGL ES内容。 您还可以使用GLKViewController对象来管理视图并支持动画化其内容。

相关参考:Drawing with OpenGL ES and GLKit

3. iOS Supports Alternative Rendering Targets - iOS支持可选渲染目标

除了绘制内容以填充整个屏幕或视图层次结构的一部分外,您还可以使用OpenGL ES帧缓冲区对象进行其他渲染策略。 iOS实现标准的OpenGL ES帧缓冲对象,您可以将其用于渲染到屏幕外缓冲区或纹理,以便在OpenGL ES场景中的其他位置使用。 此外,iOS上的OpenGL ES支持渲染到Core Animation层(CAEAGLLayer类),然后您可以将其与其他图层结合,构建应用的用户界面或其他视觉显示

相关参考:Drawing to Other Rendering Destinations

4. Apps Require Additional Performance Tuning - 应用程序需要额外的性能调优

图形处理器是针对图形操作优化的并行化设备。 为了在应用程序中获得出色的表现,您必须仔细设计应用程序以将数据和命令提供给OpenGL ES,以便图形硬件与您的应用程序并行运行。 调整不当的应用程序会强制CPU或GPU等待另一个完成处理命令。

您应该设计您的app以有效地使用OpenGL ES API。 一旦你完成app,请使用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

5. OpenGL ES May Not Be Used in Background Apps - OpenGL ES可能不会用于后台应用程序

在后台运行的应用程序可能不会调用OpenGL ES函数。 如果您的应用程序在后台访问图形处理器,则会由iOS自动终止。 为了避免这种情况,您的应用程序应该先刷新之前提交给OpenGL ES的挂起命令,然后才能移动到后台,并避免调用OpenGL ES,直到它移回到前台。

相关参考:Multitasking, High Resolution, and Other iOS Features

6. OpenGL ES Places Additional Restrictions on Multithreaded Apps - OpenGL ES为多线程应用程序添加了其他限制

设计应用程序以利用并发功能可以帮助您提高应用程序的性能。 如果您打算在OpenGL ES应用程序中添加并发性,则必须确保它不会同时从两个不同的线程访问相同的上下文。

相关参考:Concurrency and OpenGL ES


学习规划进程


其他参考

OpenGL ES是由Khronos集团定义的开放标准。 有关OpenGL ES标准的更多信息,请参阅其网页http://www.khronos.org/opengles/

  • Addison-Wesley发布的OpenGL® ES 3.0 Programming Guide全面介绍了OpenGL ES的概念。
  • OpenGL® Shading Language, Third Edition,也由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 Framework Reference介绍了由Apple提供的一个框架,可以更轻松地开发OpenGL ES 2.0和3.0应用程序。

参考文章

1. OpenGLES渲染管道,顶点着色器(VertexShader) ,片元着色器(FragmentShader)

后记

未完,待续~~~

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

推荐阅读更多精彩内容