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

96
刀客传奇
0.2 2017.09.28 14:43* 字数 2348

版本记录

版本号 时间
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)

后记

未完,待续~~~

OC
Web note ad 1