编制程序指南,ES和GLKit进行绘图
分类:计算机编程

本文是苹果官方文书档案的翻译,由于自家水平有限,文中难免有错漏之处,请探究指正。最先的文章链接

本子记录

版本号 时间
V1.0 2017.09.28

本子记录

版本号 时间
V1.0 2017.09.28

About OpenGL ES

The Open Graphics Library (OpenGL) is used for visualizing 2D and 3D data. It is a multipurpose open-standard graphics library that supports applications for 2D and 3D digital content creation, mechanical and architectural design, virtual prototyping, flight simulation, video games, and more. You use OpenGL to configure a 3D graphics pipeline and submit data to it. Vertices are transformed and lit, assembled into primitives, and rasterized to create a 2D image. OpenGL is designed to translate function calls into graphics commands that can be sent to underlying graphics hardware. Because this underlying hardware is dedicated to processing graphics commands, OpenGL drawing is typically very fast.

开放图形库(OpenGL)用于2D和3D数据的可视化。 它是三个多用途的怒放标准图形库,帮忙2D和3D数字内容创设,机械和建筑设计,虚构原型,飞行模拟,录制游戏等应用。 您能够行使OpenGL配置3D图形流水生产线并付诸数据。 顶点被撤换和点亮,组合成原始图像,并拓宽光栅化以创制2D图像。 OpenGL意在将函数调用转变为可发送到底层图形硬件的图形命令。 因为那些底层硬件特地用来拍卖图片命令,因而OpenGL绘图平时十二分快。

OpenGL for Embedded Systems (OpenGL ES) is a simplified version of OpenGL that eliminates redundant functionality to provide a library that is both easier to learn and easier to implement in mobile graphics hardware.

OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,消除了冗余功效,进而提供更易于学习和轻松在移动图形硬件中完结的库。

图片 1

盛放图形库(Open Graphics Library:OpenGL) 被用来展现2D和3D数据,它是二个多用途的开放标准图形库,扶助2D、3D数字内容的成立,机械和建筑设计、设想原型、飞行模拟、录制游戏等多种应用。您能够选取OpenGL配置3D图形管线并提交数据。顶点被更改和点亮,组成原始图像,实行光栅化后生成2D图像。OpenGL意在将函数调用转变为可发送到底层图形硬件的图片命令,该底层硬件特地用来拍卖图片命令,由此OpenGL绘图经常十三分快。OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本(特地为嵌入式系统规划,在移动端操作系统中动用普及),该版本化解了冗余功用,提供了更易学习且便于在活动图形硬件中落实的库。

前言

OpenGL ES是三个无敌的图形库,是跨平台的图样API,属于OpenGL的二个简化版本。iOS系统能够利用OpenGL ES将图像数据直接送入到GPU举行渲染,那样幸免了从CPU实行总结再送到显卡渲染带来的性质的高消耗,能带来来越来越好的录像效果和客户体验。接下来几篇就介绍下iOS 系统的 OpenGL ES框架。感兴趣的能够看下边几篇。
1. OpenGL ES 框架详细深入分析(一) —— 基本大概浏览

前言

OpenGL ES是三个强劲的图形库,是跨平台的图形API,属于OpenGL的多少个简化版本。iOS系统能够行使OpenGL ES将图像数据直接送入到GPU实行渲染,那样防止了从CPU举办测算再送到显卡渲染带来的品质的高消耗,能拉动来越来越好的摄像效果和顾客体验。接下来几篇就介绍下iOS 系统的 OpenGL ES框架。感兴趣的能够看上边几篇。
1. OpenGL ES 框架详细深入分析(一) —— 基本大概浏览
2. OpenGL ES 框架详细分析(二) —— 关于OpenGL ES
3. OpenGL ES 框架详细深入分析(三) —— 创设用于iOS的OpenGL ES应用程序的清单
4. OpenGL ES 框架详细剖析(四) —— 配置OpenGL ES的上下文

At a Glance

OpenGL ES allows an app to harness the power of the underlying graphics processor. The GPU on iOS devices can perform sophisticated 2D and 3D drawing, as well as complex shading calculations on every pixel in the final image. You should use OpenGL ES if the design requirements of your app call for the most direct and comprehensive access possible to GPU hardware. Typical clients for OpenGL ES include video games and simulations that present 3D graphics.

OpenGL ES允许应用程序利用底层图形管理器的功效。 iOS设备上的GPU能够进行理并答复杂的2D和3D绘图,以及最后图像中各类像素的复杂阴影总括。 您应该选用OpenGL ES,即使您的应用程序的安顿需求须求最直接和完善的拜候大概对GPU硬件。 OpenGL ES的突出客商端富含录制游戏和3D图形模拟。

OpenGL ES is a low-level, hardware-focused API. Though it provides the most powerful and flexible graphics processing tools, it also has a steep learning curve and a significant effect on the overall design of your app. For apps that require high-performance graphics for more specialized uses, iOS provides several higher-level frameworks:

  • The Sprite Kit framework provides a hardware-accelerated animation system optimized for creating 2D games. (See Sprite Kit Programming Guide.)
  • The Core Image framework provides real-time filtering and analysis for still and video images. (See Core Image Programming Guide.)
  • Core Animation provides the hardware-accelerated graphics rendering and animation infrastructure for all iOS apps, as well as a simple declarative programming model that makes it simple to implement sophisticated user interface animations. (See Core Animation Programming Guide.)

You can add animation, physics-based dynamics, and other special effects to Cocoa Touch user interfaces using features in the UIKit framework.

OpenGL ES是三个低端的,以硬件为主要的API。 固然它提供了最精锐和最灵敏的图形管理工科具,但它也兼具"陡峭的就学曲线",对你的应用程序的欧洲经济共同体安排有第一的影响。 对于急需高品质图形用于更专门的学问化应用的利用,iOS提供了多少个更加高档其他框架:

  • Pepsi-Cola Kit框架提供了贰个为开创2D戏耍而优化的硬件加快动画系统。 (请参见“Pepsi-Cola Kit编制程序指南”。)
  • Core Image框架为静态和录像图像提供实时过滤和剖析。
  • 着力动画为具有iOS应用程序提供了硬件加快的图形渲染和卡通基础设备,以及一个简约的评释式编制程序模型,使得实现复杂的客户界面动画变得简单。

图片 2CPU和GPU关系图

关于OpenGL ES

能够参谋参照他事他说加以考察文书档案

开放图形库(OpenGL)用于2D和3D数据的可视化。 它是叁个多职能的盛放标准图形库,帮衬2D和3D数字内容创立,机械和建筑设计,虚构原型,飞行模拟,录制游戏等应用。 您能够应用OpenGL配置3D图形管道并提交数据。 顶点被撤换和点亮,组装成图元,并拓宽光栅化以创办2D图像。 OpenGL目的在于将函数调用转变为可发送到底层图形硬件的图形命令。 因为这一个底层硬件特意用来拍卖图片命令,由此OpenGL绘图平时十三分快。

用于嵌入式系统的OpenGL(OpenGL ES)是OpenGL的简化版本,能够裁撤冗余功效,进而为活动图形硬件提供更便于学习和更易于完结的库。

图片 3


Drawing with OpenGL ES and GLKit - 使用OpenGL ES和GLKit进行绘图

GLKit框架提供了视图和视图调整器类,能够消除绘图和卡益阳OpenGL ES内容所需的装置和掩护代码。 GLKView类管理OpenGL ES基础结构为您的绘图代码提供了一个地点,GLKViewController类为GLKit视图中OpenGL ES内容的平整动画提供了叁个渲染循环。 这个类扩大了用于绘制视图内容和保管视图彰显的标准UIKit设计情势。 因而,您可以将重要放在OpenGL ES渲染代码上,并让你的接纳急迅运转。 GLKit框架还提供了其余功效来简化OpenGL ES 2.0和3.0费用。


OpenGL ES Is a Platform-Neutral API Implemented in iOS(在iOS中OpenGL ES是阳台非亲非故的API)

Because OpenGL ES is a C-based API, it is extremely portable and widely supported. As a C API, it integrates seamlessly with Objective-C Cocoa Touch apps. The OpenGL ES specification does not define a windowing layer; instead, the hosting operating system must provide functions to create an OpenGL ES rendering context, which accepts commands, and a framebuffer, where the results of any drawing commands are written to. Working with OpenGL ES on iOS requires using iOS classes to set up and present a drawing surface and using platform-neutral API to render its contents.

因为OpenGL ES是叁个基于C的API,它这一个有利集成并取得左近的协助。 作为C API,它与Objective-C Cocoa Touch应用程序无缝集成。 OpenGL ES规范未有概念窗口层; 相反,托管操作系统必得提供函数来创立尚可命令的OpenGL ES渲染上下文以及写入任何绘图命令的结果的帧缓冲区。 在iOS上行使OpenGL ES要求运用iOS类来设置和显现绘图层,并动用平台非亲非故的API来展现其剧情。

Relevant Chapters: Checklist for Building OpenGL ES Apps for iOS, Configuring OpenGL ES Contexts
连带章节

译者:由上图可知,CPU、GPU之间的关系,类似于C/S模式,其中CPU相当于Client,GPU相当于Server,当应用需要图形的绘制以及渲染时,它会通过OpenGL ES框架,向GPU传输相应绘制指令(类似于client发起的请求),GPU收到指令后会进行相应操作(类似于Server对请求进行响应),最终将渲染结果在屏幕上绘制出来。

概览

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客商分界面增加基于物理的动画和另外特效。

A GLKit View Draws OpenGL ES Content on Demand - GLKit视图依照供给绘制OpenGL ES内容

GLKView类提供与典型UIView绘图周期万分的OpenGL ES。 UIView实例自动配置其图形上下文,以便你的drawRect:金玉锦绣只要求实行Quartz 2D制图命令,并且GLKView实例自动配置,以便你的绘图方法只供给实行OpenGL ES绘图命令。 GLKView类通过维护保存OpenGL ES绘图命令结果的framebuffer对象提供此成效,然后在绘图方法再次回到后自动将其出示给Core Animation。

像正规的UIKit视图同样,GLKit视图依据必要表现其剧情。 当您的视图第贰次突显时,它会调用您的绘图方法 - Core Animation会缓存渲染的出口,并在展示视图时呈现它。 当您想要改变视图的剧情时,请调用其setNeedsDisplay方法,然后视图再一次调用绘图方法,缓存生成的图像,并将其出示在显示屏上。 当用于渲染图像的数据有的时候常转移或仅响应于顾客操作时,此措施充裕有效。 通过仅在急需时才提供新的视图内容,您能够节省设备上的电瓶电量,并为设备进行其余操作留出越来越多时光。

图片 4

Rendering OpenGL ES content with a GLKit view

GLKit Provides a Drawing Surface and Animation Support

Views and view controllers, defined by the UIKit framework, control the presentation of visual content on iOS. The GLKit framework provides OpenGL ES–aware versions of these classes. When you develop an OpenGL ES app, you use a GLKView object to render your OpenGL ES content. You can also use a GLKViewController object to manage your view and support animating its contents.

UIKit框架定义的视图和视图调节器调整iOS上的视觉内容的变现。 GLKit框架提供这么些类的OpenGL ES-aware版本。 开拓OpenGL ES应用程序时,您能够动用GLKView对象来表现OpenGL ES内容。 您还足以选拔GLKViewController对象来治本视图并支持动画化其内容。

Relevant Chapters: Drawing with OpenGL ES and GLKit

OpenGL ES允许应用程序利用底层图形管理器的功能。 iOS设备上的GPU能够实行复杂的2D和3D绘图,并对终极图像中的每一种像素举办复杂的黑影总计。 若是应用程序的宏图须要必要尽大概直接到家的寻访GPU硬件,那么你应有运用OpenGL ES。 OpenGL ES的优秀顾客端蕴含能够展现3D图形的录制游戏和模拟游戏。OpenGL ES是三个底层的,以硬件为重大的API。固然它提供了有力和灵活的图形管理工科具,但也具有陡峭的上学曲线,而且会对您应用程序的一体化布署有至关心注重要影响。对于那一个急需较高图形品质的正儿八经应用,iOS提供了多少个更加高档案的次序的框架:

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

1. Creating and Configuring a GLKit View - 成立和安顿GLKit视图

你能够以编制程序情势或选拔Interface Builder创立和安插GLKView对象。 在将其用于绘图在此以前,必得将其与EAGLContext对象相关联(请参阅Configuring OpenGL ES Contexts)。

  • 以编制程序格局开创视图时,首先创造上下文,然后将其传递给视图的initWithFrame:context:method
  • 从sb中加载视图后,创设多少个上下文并将其设置为视图的左右文属性的值。

GLKit视图会自动创制和布局本人的OpenGL ES framebuffer对象和renderbuffers。 您能够选拔视图的可绘制属性来支配那个指标的性质,如下边代码所示。 固然您改动GLKit视图的深浅,比例因子或可绘制属性,则会在后一次绘制内容时自动删除天公地道复创建相应的framebuffer对象和renderbuffers。

// Configuring a GLKit view

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Create an OpenGL ES context and assign it to the view loaded from storyboard
    GLKView *view = (GLKView *)self.view;
    view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

    // Configure renderbuffers created by the view
    view.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888;
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
    view.drawableStencilFormat = GLKViewDrawableStencilFormat8;

    // Enable multisampling
    view.drawableMultisample = GLKViewDrawableMultisample4X;
}

您能够选取其drawableMultisample属性为GLKView实例启用多采集样品。 多采样是一种抗锯齿情势,能够平滑锯齿状边缘,以越多的内部存款和储蓄器和局地管理时间为代价格更始善大多数3D应用程序的图像质量

  • 即使启用多采集样品,则始终测量试验应用程序的本性,以确定保障其依旧可以接受。
iOS Supports Alternative Rendering Targets(iOS援助代表渲染目的)

Besides drawing content to fill an entire screen or part of a view hierarchy, you can also use OpenGL ES framebuffer objects for other rendering strategies. iOS implements standard OpenGL ES framebuffer objects, which you can use for rendering to an offscreen buffer or to a texture for use elsewhere in an OpenGL ES scene. In addition, OpenGL ES on iOS supports rendering to a Core Animation layer (the CAEAGLLayer class), which you can then combine with other layers to build your app’s user interface or other visual displays.

除了绘制内容以填充整个屏幕或视图档期的顺序结构的一局地外,您还是能运用OpenGL ES framebuffer对象开展任何渲染战术。 iOS完结标准的OpenGL ES帧缓冲对象,您能够将其用于渲染到显示器外缓冲区或纹理,以便在OpenGL ES场景中的另外职位运用。 其余,iOS上的OpenGL ES协理渲染到Core Animation层(CAEAGLLayer类),然后您能够将其与任何图层相结合,营造利用的客户分界面或任何视觉展现。

Relevant Chapters: Drawing to Other Rendering Destinations

  • Pepsi-Cola基特框架提供了多少个为创立2D游戏而优化的硬件加快动画系统。(请参见SpriteKit编制程序指南)
  • Core Image框架为静态的实体以及摄像图像提供实时的过滤和分析。请参阅大旨图像编制程序指南
  • 主干动画为全数的的iOS应用提供了硬件加速的图纸动画渲染设施,以及一个简约的证明式编制程序模型,使得完毕复杂的客户分界面动画变得进一步简便易行。请参阅核心动画编制程序指南
  • 您能够应用UIKit框架中的成效,向Cocoa Touch顾客分界面增多基于物理的动画和任何特效。

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

2. Drawing With a GLKit View - 利用GLKit视图实行绘图

地方的代码概述了绘图OpenGL ES剧情的七个步骤:希图OpenGL ES基础设备,发表绘图命令,并将突显的剧情展现给Core Animation进展呈现。 GLKView类实现了第一和第三步。 对于第二步,您将贯彻一个绘制方法,如上边包车型的士代码所示。

// Example drawing method for a GLKit view

- (void)drawRect:(CGRect)rect
{
    // Clear the framebuffer
    glClearColor(0.0f, 0.0f, 0.1f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Draw using previously configured texture, shader, uniforms, and vertex array
    glBindTexture(GL_TEXTURE_2D, _planetTexture);
    glUseProgram(_diffuseShading);
    glUniformMatrix4fv(_uniformModelViewProjectionMatrix, 1, 0, _modelViewProjectionMatrix.m);
    glBindVertexArrayOES(_planetMesh);
    glDrawElements(GL_TRIANGLE_STRIP, 256, GL_UNSIGNED_SHORT);
}

注意:glClear函数提醒OpenGL ES能够甩掉任何现成的帧缓冲区内容,制止了高昂的内部存款和储蓄器操作将原先的内容加载到内部存款和储蓄器中。 为保证最好质量,您应该在绘制之前一贯调用此函数。

GLKView类能够为OpenGL ES绘图提供二个粗略的界面,因为它能够管理OpenGL ES渲染进度的正式部分:

  • 在调用绘图方法此前,该视图:

    • 使其EAGLContext指标产生当前上下文
    • 基于近日高低,比例因子和可绘制属性(要是急需)创设二个framebuffer对象和renderbuffers
    • 将framebuffer对象绑定为绘制命令的脚下指标
    • 安装OpenGL ES视口以相配帧缓冲区大小
  • 在您的绘图方法再次回到后,视图:

    • 解决多采集样品缓冲区(假若启用多种采集样品)
    • 扬弃其剧情不再需求的renderbuffers
    • 向Core Animation呈现renderbuffer内容实行缓存和呈现

Apps Require Additional Performance Tuning(应用程序必要非常的性质调优)

Graphics processors are parallelized devices optimized for graphics operations. To get great performance in your app, you must carefully design your app to feed data and commands to OpenGL ES so that the graphics hardware runs in parallel with your app. A poorly tuned app forces either the CPU or the GPU to wait for the other to finish processing commands.

You should design your app to efficiently use the OpenGL ES API. Once you have finished building your app, use Instruments to fine tune your app’s performance. If your app is bottlenecked inside OpenGL ES, use the information provided in this guide to optimize your app’s performance.

Xcode provides tools to help you improve the performance of your OpenGL ES apps.

Graphics processors ( 图形管理器)是针对图形操作优化的交互设备。 为了在应用程序中赢得优异的表现,您必需留神设计应用程序以将数据和指令提供给OpenGL ES,以使图形硬件与你的应用程序并行运维。 调度好的应用程序会强制CPU或GPU等待另一个做各处理命令。

你应该设计您的应用程序以有效地使用OpenGL ES API。 达成应用程式制作形成后,使用Instruments 来调节应用程式的效果。 如若你的应用程序在OpenGL ES中出现瓶颈,请使用本指南中提供的音信来优化应用程序的习性。

Xcode提供了救助您提升OpenGL ES应用程序品质的工具。

Relevant Chapters: 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上的贰当中立平台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上下文

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

Rendering Using a Delegate Object - 使用代理对象进行渲染

无数OpenGL ES应用程序在自定义类中贯彻渲染代码。 这种办法的二个亮点是它同意你通过为各种渲染算法定义一个见仁见智的渲染器类来轻易扶助多少个渲染算法。 共享通用功用的渲染算法可以从超类承继。 譬喻,您能够使用差别的渲染器类来帮助OpenGL ES 2.0和3.0(请Configuring OpenGL ES Contexts)。 也许您能够行使它们来定制渲染,以猎取越来越强劲硬件的器具上的越来越好的图像品质。

GLKit极其适合这种办法 - 您能够使您的渲染器对象变成规范GLKView实例的信托。 您的渲染器类不是将GLKView子类化并促成drawRect:格局,而是利用GLKViewDelegate说道并促成glkView:drawInRect:措施。 上面代码演示了在动用运维时基于硬件作用选用渲染器类。

// Choosing a renderer class based on hardware features

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

// Create a context so we can test for features

EAGLContext *context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

[EAGLContext setCurrentContext:context];

// Choose a rendering class based on device features

GLint maxTextureSize;

glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);

if (maxTextureSize > 2048)

self.renderer = [[MyBigTextureRenderer alloc] initWithContext:context];

else

self.renderer = [[MyRenderer alloc] initWithContext:context];

// Make the renderer the delegate for the view loaded from the main storyboard

GLKView *view = (GLKView *)self.window.rootViewController.view;

view.delegate = self.renderer;

// Give the OpenGL ES context to the view so it can draw

view.context = context;

return YES;

}

OpenGL ES May Not Be Used in Background Apps(OpenGL ES大概不会用来后台应用程序)

Apps that are running in the background may not call OpenGL ES functions. If your app accesses the graphics processor while it is in the background, it is automatically terminated by iOS. To avoid this, your app should flush any pending commands previously submitted to OpenGL ES prior to being moved into the background and avoid calling OpenGL ES until it is moved back to the foreground.

在后台运维的应用程序或许不会调用OpenGL ES函数。 若是您的应用程序在后台访谈图片管理器,则会由iOS自动结束。 为幸免这种情况,您的应用程序应该在挂起前提交OpenGL ES刷新命令,然后手艺活动到后台,并幸免调用OpenGL ES,直到它移回到前台。

Relevant Chapters: Multitasking, High Resolution, and Other iOS Features

GLKit提供绘图表面和卡通片支持

UIKit框架定义的视图和视图调整器调控着iOS上海广播台觉内容的显现。 GLKit框架提供了那么些类的OpenGL ES感知版本。 开采OpenGL ES应用程序时,您能够选用GLKView对象来表现OpenGL ES内容。 您还能够使用GLKViewController对象来保管视图并协理可动画化的剧情。相关章节:用OpenGL ES和GLKit绘图

4. Apps Require Additional Performance Tuning - 应用程序必要至极的性质调优

图片管理器是指向图形操作优化的并行化设备。 为了在应用程序中收获理想的显现,您必得紧凑设计应用程序以将数据和指令提供给OpenGL ES,以便图形硬件与你的应用程序并行运营。 调节不当的应用程序会强制CPU或GPU等待另一个形成管理命令。

你应该设计您的app以使得地行使OpenGL ES API。 一旦您完了app,请使用Instruments来调动APP的功效。 若是您的应用程序在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

A GLKit View Controller Animates OpenGL ES Content - GLKit视图调控器动画化OpenGL ES内容

默许情形下,GLKView对象依照须求表现其剧情。 也正是说,使用OpenGL ES绘制的二个主要优点是它能够使用图形管理硬件来再而三成立复杂的场景 - 诸如娱乐和模拟的应用程序相当少显示静态图像。 对于这个意况,GLKit框架提供了四个视图调控器类,它为其管理的GLKView对象保险二个卡通循环。 该循环服从游戏和模拟中广泛的设计形式,分为八个品级:更新和显示。 下图显示了二个卡通循环的简化示例。

图片 5

The animation loop

OpenGL ES Places Additional Restrictions on Multithreaded Apps(OpenGL ES在二十八线程应用中的限制)

Designing apps to take advantage of concurrency can be useful to help improve your app’s performance. If you intend to add concurrency to an OpenGL ES app, you must ensure that it does not access the same context from two different threads at the same time.

陈设应用程序以使用并发作用能够协理您进步应用程序的习性。 借令你计划在OpenGL ES应用程序中增添并发性,则必得确定保障它不会同时从八个不等的线程访谈同一的上下文。

Relevant Chapters: Concurrency and OpenGL ES

iOS帮助额外的渲染目的

除此而外绘制内容填充整个荧屏或视图档期的顺序结构的某一局地外,您还足以选择OpenGL ES的帧缓冲对象举办其余渲染计策。 iOS达成了行业内部的OpenGL ES帧缓冲对象,您也足以将其用来渲染到显示器外的缓冲区恐怕纹理,以便在OpenGL ES场景中的另外义务接纳。 其余,iOS上的OpenGL ES辅助渲染到Core Animation层(CAEAGLLayer类),然后你能够将其与其余图层相结合,创设顾客分界面或另外视觉展现。相关章节:绘制别的渲染区域

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

1. Understanding the Animation Loop - 掌握动画循环

对此创新阶段,视图调控器调用其和好的立异方法(或其委托的glkViewControllerUpdate:艺术)。 在这种办法中,你应有希图绘制下二个帧。 举个例子,游戏只怕会动用这种艺术依照自最终一帧以来收到到的输入事件来分明游戏发烧友和仇人剧中人物的职位,科学可视化恐怕会利用此办法来运营其模拟步骤。 假诺你要求时刻新闻来鲜明你的选择的下一帧的情状,请使用当中贰个视图调整器的时序属性。

对此呈现阶段,视图调节器调用其视图的呈现情势,该方法又调用您的绘图方法。 在绘图方法中,您能够向GPU提交OpenGL ES绘图命令以表现内容。 为了获得最好品质,应用程序应在起初渲染新框架时修改OpenGL ES对象,然后交到绘图命令。 在上海体育场地中,展现阶段将着色器程序中的统一变量设置为在更新阶段总计的矩阵,然后交给绘图命令以表现新内容。

动画片循环依据视图调整器的framePerSecond个性提示的速率在那多个级次之间开展轮班。 您能够利用preferredFramesPerSecond品质设置所需的帧速率,以优化当前呈现硬件的质量,视图调整器会自动选择看似你的首荐值的特级帧速率。

首要提醒:为得到最好效果,请选拔应用程序能够一以贯之地完成的帧率 平滑,一致的帧率产生比不定时变化的帧速率更欢快的顾客体验。

How to Use This Document

Begin by reading the first three chapters: Checklist for Building OpenGL ES Apps for iOS, Configuring OpenGL ES Contexts, Drawing with OpenGL ES and GLKit. These chapters provide an overview of how OpenGL ES integrates into iOS and all the details necessary to get your first OpenGL ES apps up and running on an iOS device.

If you’re familiar with the basics of using OpenGL ES in iOS, read Drawing to Other Rendering Destinations and Multitasking, High Resolution, and Other iOS Features for important platform-specific guidelines. Developers familiar with using OpenGL ES in iOS versions before 5.0 should study Drawing with OpenGL ES and GLKit for details on new features for streamlining OpenGL ES development.

Finally, read OpenGL ES Design Guidelines, Tuning Your OpenGL ES App, and the following chapters to dig deeper into how to design efficient OpenGL ES apps.
Unless otherwise noted, OpenGL ES code examples in this book target OpenGL ES 3.0. You may need to make changes to use these code examples with other OpenGL ES versions

第一阅读前三章:营造用于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,以使图形硬件与你的应用程序并行运行。三个体协会调性差的应用程序会强制CPU或GPU等待另一个实现管理命令。您应该以急迅地利用OpenGL ES API的秘技来统一准备您的接纳,完毕应用制作后,使用Instruments来调动应用品质。假若你的运用在OpenGL ES中冒出瓶颈,请使用本指南开中学提供的音讯来优化利用质量。Xcode提供了帮扶您提升OpenGL ES程序品质的工具。相关章节:OpenGL ES设计指南,使用终端数据的特等推行,使用纹理数据的特级实施,着色器的特级施行,调解你的OpenGL ES应用程序

6. OpenGL ES Places Additional Restrictions on Multithreaded Apps - OpenGL ES为二十二十四线程应用程序增多了别的限制

布署应用程序以使用并发功效能够辅助您提升应用程序的质量。 借令你策动在OpenGL ES应用程序中加多并发性,则必需确定保证它不会同临时间从多少个不等的线程访谈同一的上下文。

连锁参照他事他说加以考察:Concurrency and OpenGL ES


2. Using a GLKit View Controller - 使用GLKit控制器

上面代码演示了使用GLKViewController子类和GLKView实例渲染动画OpenGL ES内容的精湛战略。

// Using a GLKit view and view controller to draw and animate OpenGL ES content

@implementation PlanetViewController // subclass of GLKViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Create an OpenGL ES context and assign it to the view loaded from storyboard
    GLKView *view = (GLKView *)self.view;
    view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

    // Set animation frame rate
    self.preferredFramesPerSecond = 60;

    // Not shown: load shaders, textures and vertex arrays, set up projection matrix
    [self setupGL];
}

- (void)update
{
    _rotation  = self.timeSinceLastUpdate * M_PI_2; // one quarter rotation per second

    // Set up transform matrices for the rotating planet
    GLKMatrix4 modelViewMatrix = GLKMatrix4MakeRotation(_rotation, 0.0f, 1.0f, 0.0f);
    _normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(modelViewMatrix), NULL);
    _modelViewProjectionMatrix = GLKMatrix4Multiply(_projectionMatrix, modelViewMatrix);
}

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    // Clear the framebuffer
    glClearColor(0.0f, 0.0f, 0.1f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Set shader uniforms to values calculated in -update
    glUseProgram(_diffuseShading);
    glUniformMatrix4fv(_uniformModelViewProjectionMatrix, 1, 0, _modelViewProjectionMatrix.m);
    glUniformMatrix3fv(_uniformNormalMatrix, 1, 0, _normalMatrix.m);

    // Draw using previously configured texture and vertex array
    glBindTexture(GL_TEXTURE_2D, _planetTexture);
    glBindVertexArrayOES(_planetMesh);
    glDrawElements(GL_TRIANGLE_STRIP, 256, GL_UNSIGNED_SHORT, 0);
}

@end

在此示例中,PlanetViewController类(自定义GLKViewController子类)的实例从好玩的事板加载,以及专门的学问GLKView实例及其可绘制属性。viewDidLoad主意创制二个OpenGL ES上下文并将其提供给视图,而且还设置动画循环的帧速率。

视图调控器自动为其视图的信托,由此它同期达成动画循环的换代和显示阶段。 在更新方法中,它总括突显旋转平面所需的转变矩阵。 在glkView:drawInRect:主意中,它将这么些矩阵提需要着色器程序,并付诸绘制命令以渲染平面几何。


Prerequisites

Before attempting use OpenGL ES, you should already be familiar with general iOS app architecture. See Start Developing iOS Apps Today.

This document is not a complete tutorial or a reference for the cross-platform OpenGL ES API. To learn more about OpenGL ES, consult the references below.

在品尝接纳OpenGL ES从前,您应该早已熟练了一般的iOS应用程序框架结构。 请参阅今日开头开荒iOS应用程序。

本文书档案不是总体的教程或跨平台OpenGL ES API的参照。 要领会关于OpenGL ES的越来越多消息,请参阅以下参照他事他说加以考察。

OpenGL ES或者不会在后台运转的施用中运用

在后台运维的应用恐怕不会调用OpenGL ES函数。如若你的利用在后台访谈图片管理器,iOS会活动终止它。为幸免这种情景,您的施用应该先刷新此前交付给OpenGL ES的吩咐,然后手艺移动到后台,并防止调用OpenGL ES,直到它移回前台。相关章节:多职务,高分辨率和别的iOS成效

学学布置进度

  • 开班的时候读那三篇小说: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,熟习在5.0事先的iOS版本中运用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版本的代码示例。


Using GLKit to Develop Your Renderer - 使用GLKit开辟您的渲染

而外查看和查看调节器基础外,GLKit框架还提供了几个其余效能来简化iOS上的OpenGL ES开荒。

See Also

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/.

  • OpenGL® ES 3.0 Programming Guide, published by Addison-Wesley, provides a comprehensive introduction to OpenGL ES concepts.
  • OpenGL® Shading Language, Third Edition, also published by Addison-Wesley, provides many shading algorithms useable in your OpenGL ES app. You may need to modify some of these algorithms to run efficiently on mobile graphics processors.
  • OpenGL ES API Registry is the official repository for the OpenGL ES specifications, the OpenGL ES shading language specifications, and documentation for OpenGL ES extensions.
  • OpenGL ES Framework Reference describes the platform-specific functions and classes provided by Apple to integrate OpenGL ES into iOS.
  • iOS Device Compatibility Reference provides more detailed information on the hardware and software features available to your app.
  • GLKit Framework Reference describes a framework provided by Apple to make it easier to develop OpenGL ES 2.0 and 3.0 apps.

OpenGL ES是由Khronos公司概念的开放标准。有关OpenGL ES典型的越多新闻,请访谈他们的网页http://www.khronos.org/opengles/。

  • 艾狄生-韦斯利宣布的OpenGL®ES 3.0编程指南周到介绍了OpenGL ES的定义。
  • OpenGL®着色语言,第三版,也由艾迪生-韦斯利出版,提供了比相当多可用于您的OpenGL ES应用程序的着色算法。您可能需求修改个中一部分算法技艺在移动图形管理器上火速运营。
  • OpenGL ES API注册表是OpenGL ES标准的法定期存款款和储蓄库,-
    OpenGL ES着色语言职业以及OpenGL ES扩充的文书档案。
  • OpenGL ES Framework Reference介绍了Apple将OpenGL ES集成到iOS中提供的阳台湾特务定成效和类。
  • iOS设备包容性参谋提供了有关您的应用程序可用的硬件和软件效率的更详细消息。
  • “GLKit框架仿照效法”介绍了由Apple提供的一个框架,能够更自在地开采OpenGL ES 2.0和3.0应用程序。

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标准的越多音讯,请访问 。

  • Addison-Wesley发布的OpenGL®ES 3.0编程指南巨细无遗介绍了OpenGL ES的概念。
  • OpenGL®着色语言,第三版,也由艾狄生-韦斯利出版,提供了点不清可用于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应用程序。

任何参谋

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,也由艾狄生-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. Handling Vector and Matrix Math - 管理向量和矩阵数学

OpenGL ES 2.0及更加高版本不提供用于创造或钦定调换矩阵的放权函数。 相反,可编制程序着色器提供顶点转变,并应用通用的均匀变量钦赐着色器输入。 GLKit框架包罗矢量和矩阵类型和效用的综合库,针对iOS硬件上的高质量举办了优化。 (见GLKit Framework Reference。)

后记

未完,待续~~~

图片 6

2. Migrating from the OpenGL ES 1.1 Fixed-Function Pipeline - 从OpenGL ES 1.1恒定功用管道迁移

OpenGL ES 2.0及越来越高版本删除与OpenGL ES 1.1牢固作用图形管道相关联的有着机能。GLKBaseEffect类为OpenGL ES 1.1管道的更动,照明和影子阶段提供了Objective-C模拟,GLKSkyboxEffectGLKReflectionMapEffect类扩大了对常见视觉效果的协理。 有关详细音讯,请参阅那些类的参照他事他说加以考察文书档案。

3. Loading Texture Data - 加载纹理数据

GLKTextureLoader类提供了一种简易的办法,可将纹理数据从iOS扶助的其余图像格式加载到OpenGL ES上下文中,同步或异步。 (请参阅Use the GLKit Framework to Load Texture Data。)

后记

未完,待续~~~

图片 7

本文由pc28.am发布于计算机编程,转载请注明出处:编制程序指南,ES和GLKit进行绘图

上一篇:手把手教您打包一个轻易的iOS,0下闭包语法汇总 下一篇:没有了
猜你喜欢
热门排行
精彩图文