为何说OpenGL ES上使用Vulkan不适合作为SDK

描述

我们非常高兴的告诉大家最新版本的PowerVR SDK框架5.0和相关工具第二版本正式推出,这次更新包括很多激动人心的变化同时承诺让每个PowerVR GPUs开发者的工作更加的简单方便。这个版本同时涉及多个重大的改进,本篇文章将详细向大家介绍。

之前4.x系列框架主要侧重于在OpenGL ES和Vulkan之间提供统一的接口,充当跨平台、跨API引擎解决方案的基础。在之前的版本中已经实现了这些功能并且这些版本会继续向开发者提供。然而我们已经看到了大家的反馈,因此我们需要作出一些重大改变为广大开发者提供更大的便利。

首先我们决定先回到最基础的方面,Vulkan API完全是为了让开发人员有更多的自主和控制权,而我们之前的版本包含了对开发人员更多的手把手指导,因此这很可能会阻碍Vulkan的开发。

第二我们感觉到在OpenGL ES上使用Vulkan不适合作为SDK,这也同时干扰了OpenGL ES SDK的功能定位——OpenGL ES API学习的辅助工具。

因此现在我们将一切交还到开发人员的手中,把所有的东西都去除掉只留下有用的实现和封装库。这也意味着它不会向后兼容,但是你会真正使用Vulkan在工作而不是在使用基于Vulkan的框架。

下面的介绍一下PowerVR SDK 5.0框架!

powervrPowerVR SDK 5.0框架结构图

新框架包括三大部分——通用库文件、Vulkan库和OpenGL ES库
  •   通用库文件是PVRShell、PVRCore和PVRAssets
  -  PVRCore是很多模块的依赖,它提供很多底层支持代码,这包括通用类型、数据流、日志记录、引用计数等。
  -  PVRShell是一个独立的抽象平台,它是API的入口同时负责操作系统特定的窗口和输入,包括最新版本中对Wayland的支持。
  -  PVRAssets包括的代码用于处理资产比如纹理、模型等,它们会通过文件的方式加载。
  •   OpenGL ES库包括PVRUtilsGles(涉及OpenGL ES具体功能的实现实例)和PVRCamera库
  •   全新的Vulkan库包括PVRVk,它主要是Vulkan的SDK和简单的封装,同时还提供PVRUtilsVk,它包含Vulkan的具体使用帮助。

后面我们会具体介绍这些库文件,但是首先我们需要了解一下之前PowerVR SDK框架4.x系列版本,这样我们可以对作出的改变进行对比。

PowerVR框架5.0有哪些变化?

首先我们了解一下之前框架版本是如何设计的:

powervr

如上图所示4.x版本系列的框架结构与全新推出的5.0版本非常的不同,对于OpenGL和Vulkan并没有进行区分,而且依赖项也更加的复杂。4.x系列版本的一些库在5.0版本中进行了合并或者融合到5.0版本新的库中。
• PVRShell与5.0版本的类似,但是它与其他模块的耦合更加的紧密
• PVRCore和PVRAssets在4.x系列版本和5.0版本中基本是相同的,但是在5.0版本中从各方面进行了改进
• PVREnegineUtils根据PVRApi提供通用功能实现API抽象,在5.0版本中我们对OpenGL ES和Vulkan的实用工具分别进行了版本的调优和优化。
• PVRApi包括Vulkan和OpenGL ES API接口抽象资源,在5.0版本中这些抽象设置被取消了
• PVRNativeApi为底层API提供了实时绑定和实现的程序,在5.0版本中绑定只需要简单的头文件,所以不需要类似的工程文件。
• PVRCamera适用于OpenGL ES,并且提供iOS和安卓平台硬件摄像头驱动支持——在5.0版本中保持相同。

提升对Vulkan的支持

那么有哪些变化呢?现在这个框架更加专注于Vulkan并且变得更加的流畅,它提供了大量新的功能,帮助手册等并且变得简单。

PVRVk是一个独立的C++ Vulkan封装库(没有外部依赖),增加了智能指针支持、命名空间和强类型枚举等。这些特性让开发过程变得更加的容易,它是在4.x版本的PVRApi基础上对于Vulkan部分进行了精简和改进。

与4.x系列版本相比它具有更底层的功能抽象,并且已经接近于像Vulkan HPP这样的底层抽象,但是仍然也保留着PowerVR框架 让开发尽可能的简单的根本定位。现在大部分工作都是开发人员来负责实现,像Vulkan API的使用具有更多的自主权,但是在4.x系列版本中这些功能都是由框架来管理的。

谈到这里那么PVRUtilsVk是一个新的模块,它提供一些简单通用任务的帮助手册,不需要开发人员编写事例代码,包括的常用任务如下:
 • 创建实例
 • 创建设备
 • 管理队列
 • 创建转换链
 • 以单行的形式管理接口
 • 上传纹理

PVRUtilsVk依赖于PVRVk、PVRCore和PVRAssets。

我们同时也向开发人员提供vulkan_IMG.h头文件,它是对Khronos_vulkan.h文件的修改b版本,但是使用了强类型枚举。我们同时也移除了全局命名空间原型,这样做是为了尽可能减少全局命名空间的使用。

PVRVk具有自己的命名空间——pvrvk::而不是pvr::,它覆盖了该框架的其余部分。

简化后的框架设计

OpenGL ES框架已经回到了它的教育定位,跨平台的交叉API引用解决方案无疑会阻碍它的教育功能定位。这意味着PVRGles也不再存在,替代它的是OpenGL ES版本的PVRUtils(PVRUtilsGles)能提供所需要的一切,它提供的工具可以直接操作OpenGL ES而不是引用中间的抽象接口。

很多函数库是动态加载的,而且都采用gl命名空间,DynamicEGL.h和DynamicGles.h头文件是用于加载EGL和OpenGL ES函数指针的独立头文件,开发人员将学习并享受对功能的完全控制,在后面的开发过程中会使用原生的OpenGL ES代码,比如gl::BindTexture()。

模块简化设计总结

一些部分已经与其他模块进行的合并或者完全移除,现在的依赖项减少了很多。PVRCore保持不变,但是一些通用的接口API进行了重新整理,比如IGraphicsContext、IPlatformContext等等。

PVRShell目前只依赖于PVRCore,它是一个独立的平台抽象层,前面提到过目前已经支持Wayland。

PVRNativeAPI和EngineUtils已经合并到PVRUtilsGles和PVRUtilsVk中,每一项都负责相应的抽象接口,它们都依赖于PVRCore和PVRAssets。PVRUtilsVk,没有意外的,也依赖于PVRVk,两个库文件都提供了初始化的帮助手册,比如创建EGL/EAGL内容(contexts)、着色器(shaders)、Vulkan转换链等,此外还有一些功能比如纹理上传等等。

PVRCamera与之前保持不变,仅支持OpenGL ES。

总结

正如大家所见我们对SDK框架做出了很多重大的改变,我们只有提供非常好的功能改进才能够替换之前的4.x系列版本。如果你需要更多的信息,我们的框架参考文档已经更新。如果你需要进一步的帮助,不要忘记我们的技术支持论坛,我们的技术支持团队随时准备回答你的任何问题。我们希望大家喜欢这个全新推出的框架版本。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分