OpenGL ES 苹果编程指南 官方文档翻译01

OpenGL ES Programming Guide for iOS

文章源地址(英文):https://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008793

关于OpenGL ES

开放图形库(OpenGL)用于可视化的2D和3D数据。它是一种多用途的开放式标准图形库,支持2D和3D数字内容的创建,机械和建筑设计,虚拟样机,飞行模拟游戏,视频游戏,和更多的应用程序。 OpenGL允许应用程序开发人员配置3D图形管线,并提交给它的数据。顶点被变换和点亮时,组装成基本图元,然后光栅化以创建2D图像。 OpenGL被设计用来转化函数调用到图形命令,这写图形命令可以被发送到底层的图形硬件。因为这个底层硬件处理图形命令,OpenGL绘图通常是非常快的。


对于嵌入式系统的OpenGL(OpenGL ES)是一个简化版本的OpenGL,消除了冗余的功能,提供一个库,它是更容易学习,更容易实现在移动图形硬件。

OpenGL ES 1.x 针对固定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。OpenGL ES 1.0 是以 OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础的,它们分别又支持 common 和 common lite 两种profile。lite profile只支持定点实数,而common profile既支持定点数又支持浮点数。 OpenGL ES 2.0 则是参照 OpenGL 2.0 规范定义的

OpenGL ES 的基本工作流程图:

image: ../Art/cpu_gpu.jpg

概览


苹果公司提供的OpenGL ES 1.1和OpenGL ES 2.0的实现:


OpenGL ES 1.1实现了一个定义良好的固定功能管线。固定功能流水线实现了传统的照明和阴影着色模型,该模型允许每个阶段的管道被配置以执行特定任务,或当它的函数功能不需要的时候可以禁止。
OpenGL ES 2.0分享了许多常见的OpenGL ES 1.1的功能,但删除了所有针对固定功能管线顶点和片段管线的阶段。相反,它引入了新的功能,提供了一个通用着色器为基础的管道。着色器允许您编写自定义顶点和片段的功能,图形硬件上直接执行。着色器,应用程序可以更精确和更清楚地定制管道和执行每个顶点和片段的计算输入。
OpenGL ES是基于C语言的,与平台无关的API
因为OpenGL ES是一个基于C语言的API,它是非常便携的,并得到广泛支持。作为一个C API,它可以无缝集成到Objective-C的Cocoa Touch的应用程序。在OpenGL ES规范并没有定义一个窗口层,相反,主机操作系统必须提供的功能来创建一个OpenGL ES渲染的背景下,接受命令,和一个帧缓冲,任何绘图命令的结果将被写入。

相关章节:“在iOS上的OpenGL ES”,“配置的OpenGL ES上下文”

OpenGL ES是集成到核心动画(Core Animation)
Core Animation是iOS图形的基础,它可以将您的应用程序中的OpenGL ES内容显示到屏幕上。当你开发OpenGL ES应用程序时,你的OpenGL ES内容被渲染到一个特殊的Core Animation层,被称为作为一个CAEAGLLayer对象。使用OpenGL ES渲染的图像存储在CAEAGLLayer。 Core Animation会组合这些图像和其他层中的内容,并提供最终的图像在屏幕上。


相关章节:“使用OpenGL ES绘图”

帧缓冲对象(Framebuffer Objects)总是渲染目标
假设有两种帧缓存系统提供的帧缓存器和帧缓冲对象的OpenGL ES规范。系统帧缓冲的分配使用由主机操作系统提供的API,并连接到屏幕或窗口环境。帧缓冲对象主要是针对屏幕以外的渲染,并没有直接连接到屏幕或窗口环境。 IOS只使用帧缓冲对象,而不是创建一个单独的系统帧缓冲,iOS扩展了OpenGL ES API,允许一个帧缓冲对象被分配,这样它的内容就可以与核心动画(Core Animation)。


相关章节:“使用OpenGL ES绘图”

不同设备上的功能可能会有所不同
iOS设备支持各种具有不同功能的图形处理器。有些设备只支持OpenGL ES 1.1和OpenGL ES 2.0,旧设备只支持OpenGL ES 1.1。即使是支持同一版本的OpenGL ES的设备可能有不同的能力,根据iOS的版本和底层的图形硬件。苹果公司提供了许多的OpenGL ES扩展,为您的应用提供新的性能。
为了让您的应用程序运行在尽可能多的设备并确保与未来的设备和iOS版本的兼容性,您的应用程序必须始终测试底层的OpenGL ES实现的功能,在运行时,禁用任何功能,不具备必要支持的iOS设备。


相关章节:“配置的OpenGL ES Contexts”,“确定OpenGL ES的功能,”平台说明“

应用程序需要额外的性能优化
图形处理器并行设备进行图形操作方面进行了优化。要获得很好的性能在您的应用程序里,你必须仔细设计你的应用程序去提供有效的数据和命令到OpenGL ES图形硬件,这样图形硬件就能和您的应用程序并行运行。一个不好的协调会迫使CPU或是GPU去不得不等待对方完成它自己的处理命令。
您应该设计你的应用程序有效合理的使用OpenGL ES API。一旦你已经完成构建您的应用程序,使用工具来微调您的应用程序的性能。如果您的应用程序在OpenGL ES方面遇到性能的瓶颈了,使用本指南中提供的信息来优化您的应用程序的性能。
Xcode的4提供了新的工具来帮助你提高你的OpenGL ES应用程序的性能。

相关章节的“OpenGL ES应用程序设计指南”,“工作和顶点数据的最佳实践”,“工作与纹理数据”,“最佳实践着色器的最佳实践,”调整你的OpenGL ES应用程序“,”平台说明“

当应用程序进入后台OpenGL ES 或许不能使用
在后台运行的应用程序可能无法调用OpenGL ES的功能。如果您的应用程序访问图形硬件处理器,程序是在后台时,它会自动终止被iOS系统。为了避免这种情况,您的应用程序应该清除任何之前要提交给OpenGL ES挂起的命令,在程序进入到后台之前,并避免调用OpenGL ES,直到程序移回到前台。

相关章节:“实现多任务感知的OpenGL ES应用”

OpenGL ES在多线程应用程序中额外的限制
设计的应用程序会充分的利用多线程,它可以帮助提高应用程序的性能。如果您的OpenGL ES应用程序也添加并发性,你必须确保应用程序不会从两个不同的线程同时访问相同的上下文(context)。

相关章节:“并发和OpenGL ES”

如何使用这个本档
如果你是新手在OpenGL ES或iOS开发上,那么你要开始通过阅读iOS上的“OpenGL ES”,它提供的OpenGL ES的体系结构,它是如何集成到iOS的概述。为了阅读剩余的章节。

有经验的iOS开发者应该专注于阅读“使用OpenGL ES绘图”,以了解如何整合到您的应用程序中的OpenGL ES以及如何正确地贯彻执行渲染循环的新的细节。然后,阅读“OpenGL ES应用程序设计指南”,更深入地研究如何能够设计高效的OpenGL ES应用程序。 “平台”上的硬件和软件提供给您的应用程序提供更详细的信息。


先决条件


在试图创建一个OpenGL ES应用程序之前,你应该已经熟悉意见,意见与核心动画互动。请参阅编程指南适用于iOS的。


虽然本文档介绍了重要的OpenGL ES的概念,它不是一个教程或参考的OpenGL ES API。要了解更多有关创建OpenGL ES的应用程序,请参阅下面的参考资料。

参见


OpenGL ES是由Khronos集团定义一个开放的标准。对于OpenGL ES 1.1和2.0的更多信息,请咨询自己的网页在http://www.khronos.org/opengles/。


的OpenGL®ES2.0编程指南,由Addison-Wesley出版,提供了一个全面的介绍了OpenGL ES的概念。
的OpenGL®着色语言,第三版,由Addison-Wesley出版,提供了许多明暗处理算法,可用于在你的OpenGL ES应用程序。您可能需要修改一些算法的移动图形处理器的运行效率。
OpenGL ES API的注册表是官方库中的OpenGL ES 1.1和OpenGL ES 2.0规格的OpenGL ES着色语言规范和文档的OpenGL ES扩展。
OpenGL ES 1.1规范参考页提供了一个完整的OpenGL ES 1.1规范,按字母顺序排列的索引。
OpenGL ES 2.0的参考页提供了一个完整的OpenGL ES 2.0规范,按字母顺序排列的索引。
参考OpenGL ES框架的的苹果公司提供的集成OpenGL ES融入iOS平台特定的函数和类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值