关于 Vulkan 简介 —— Android N 引入新的 3D 渲染引擎
来源:互联网 发布:网络时间校准 编辑:程序博客网 时间:2024/05/11 03:29
关于 Vulkan
Vulkan 被视作是 OpenGL 的后续产品。 它是一种多平台 API,可支持开发人员准备游戏、CAD 工具、性能基准测试等高性能图形应用。 它可在不同的操作系统(比如 Windows*、Linux* 或 Android*)上使用。 Vulkan 由科纳斯组织创建和维护。 Vulkan 与 OpenGL 之间还有其他相似之处,包括图形管道阶段、OpenGL 着色器(一定程度上),或命名。
但也存在许多差异,但这进一步验证了新 API 的必要性。 20 多年来,OpenGL 一直处于不断变化之中。 自 90 年代以来,计算机行业发生了巨大的变化,尤其是显卡架构领域。 OpenGL 库非常适用,但仅依靠添加新功能以匹配新显卡功能并不能解决一切问题。 有时需要完全重新设计。 因此创建出了 Vulkan。
Vulkan 基于 Mantle* — 第一个全新的低级别图形 API。 Mantle 由 AMD 开发而成,专为 Radeon 卡架构而设计。 尽管是第一个公开发布的 API,但使用 Mantle 的游戏和基准测试均显著提升了性能。 后来陆续发布了其他低级别 API,比如 Microsoft 的 DirectX* 12、Apple 的 Metal*,以及现在的 Vulkan。
传统图形 API 和全新低级别 API 之间有何区别? OpenGL 等高级别 API 使用起来非常简单。 开发人员只需声明操作内容和操作方式,剩下的都由驱动程序来完成。 驱动程序检查开发人员是否正确使用 API 调用、是否传递了正确的参数,以及是否充分准备了状态。 如果出现问题,将提供反馈。 为实现其易用性,许多任务必须由驱动程序在“后台”执行。
在低级别 API 中,开发人员需要负责完成大部分任务。 他们需要符合严格的编程和使用规则,还必须编写大量代码。 但这种做法是合理的。 开发人员知道他们的操作内容和希望实现的目的。 但驱动程序不知道,因此使用传统 API 时,驱动程序必须完成更多工作,以便程序正常运行。 采用 Vulkan 等 API 可避免这些额外的工作。 因此 DirectX 12、Metal 或 Vulkan 也被称为精简驱动程序/精简 API。 大部分时候它们仅将用户请求传输至硬件,仅提供硬件的精简抽象层。 为显著提升性能,驱动程序几乎不执行任何操作。
低级别 API 要求应用完成更多工作。 但这种工作是不可避免的, 必须要有人去完成。 因此由开发人员去完成更加合理,因为他们知道如何将工作分成独立的线程,图像何时成为渲染对象(颜色附件)或用作纹理/采样器等等。 开发人员知道管道处于何种状态,或哪些顶点属性变化的更频繁。 这样有助于提高显卡硬件的使用效率。 最重要的原因是它行之有效。 我们能够观察到显著的性能提升。
但“能够”一词非常重要。 它要求完成其他工作,但同时也是一种合适的方法。 在有一些场景中,我们将观察到,OpenGL 和 Vulkan 之间在性能方面没有任何差别。 如果不需要多线程化,或应用不是 CPU 密集型(渲染的场景不太复杂),使用 OpenGL 即可,而且使用 Vulkan 不会实现性能提升(但可能会降低功耗,这对移动设备至关重要)。 但如果我们想最大限度地发挥图形硬件的功能,Vulkan 将是最佳选择。
主要显卡引擎迟早会支持部分(如果不是所有)新的低级别 API。 如果希望使用 Vulkan 或其他 API,无需从头进行编写。 但通常最好对“深层”信息有所了解,因此我准备这一教程。
Vulkan API
Android N 将一项新的 3D 渲染 API Vulkan™ 集成到平台中。就像 OpenGL™ ES 一样,Vulkan 是 3D 图形和渲染的一项开放标准,由 Khronos Group 维护。
Vulkan 是完全从零开始设计,以最小化驱动器中的 CPU 开销,并能让您的应用更直接地控制 GPU 操作。 Vulkan 还允许多个线程同时执行工作,如命令缓冲区构建,以获得更好的并行化。
Vulkan 开发工具和库都已卷入 Android NDK。它们包括:
- 头
- 验证层(调试库)
- SPIR-V 着色程序编译器
- SPIR-V 运行时着色器编译库
Vulkan 仅适用于已启用 Vulkan 硬件的设备上的应用,如 Nexus 5X、Nexus 6P 和 Nexus Player。 我们正在与合作伙伴密切合作,以尽快使 Vulkan 能面向更多的设备。
如需要了解更多信息,请参阅 API 文档。
参考链接:https://software.intel.com/en-us/articles/api-without-secrets-introduction-to-vulkan-preface
https://developer.android.com/about/versions/nougat/android-7.0.html
- 关于 Vulkan 简介 —— Android N 引入新的 3D 渲染引擎
- 关于.Net框架下3D游戏的设计与实现——2.1,渲染引擎Axiom简介
- 3D渲染引擎
- 我的3D引擎----水面渲染
- 我的3D引擎----水面渲染
- 简述3D引擎的渲染优化
- H5 2D渲染引擎—Pixi.js简介及小demo
- Horde3D——基于C++编写的3D渲染引擎
- 关于3D引擎中的多线程渲染(Multithreaded-Rendering)
- 关于3D引擎中的多线程渲染(Multithreaded-Rendering)
- H5 2D渲染引擎—Pixi.js 渲染器、舞台和精灵的创建
- 3D引擎简介
- UiAutomation系列——Android4.3引入的UiAutomation新框架官方简介(001)
- 基于多核平台优化的OGRE 3D渲染引擎
- 基于多核平台优化的OGRE 3D渲染引擎
- 3D渲染引擎着色方式的演化史
- H5 2D渲染引擎—Pixi.js 精灵的位置、大小、旋转、移动
- Blink: Chromium的新渲染引擎
- iOS 开发之 ReactiveCocoa 下的 MVVM(干货分享)
- 自媒体推广有哪些好处?
- TensorFlow Data Input (Part 1): Placeholders, Protobufs & Queues
- iOS巅峰之NSString,NSData,NSArray 之间的转换
- Spring 整合 Hibernate
- 关于 Vulkan 简介 —— Android N 引入新的 3D 渲染引擎
- 26. Remove Duplicates from Sorted Array
- GridView的用法、自定义控件入门写法和界面切换动画
- 数据结构上机测试2-1:单链表操作A
- 数组分割
- atoi 原来将字符串02002xzm100转换为int以后是2002
- 百家姓
- Install OpenCV on Ubuntu or Debian
- 非常简单的图片转换成PDF方法