关于 Vulkan 简介 —— Android N 引入新的 3D 渲染引擎

2023-11-16

关于 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 Vulkan 简介 —— Android N 引入新的 3D 渲染引擎 的相关文章

随机推荐

  • QT 设置窗口阴影,设置窗口圆角

    QT开发过程中 添加过自定义标题栏后 因为设置了 setWindowFlags Qt FramelessWindowHint 属性 widget界面后面阴影没有了 现在使用paint的方法绘制阴影和窗口圆角 一方面能设置阴影 一方面可解决设
  • 【java基础】包装类,自动装箱和自动拆箱

    文章目录 基本介绍 包装类 自动装箱 自动拆箱 包装类注意事项 包装类比较 包装器内容不可变 基本介绍 有时 需要将int这样的基本类型转换为对象 所有的基本类型都有一个与之对应的类 例如 Integer类对应基本类型int 通常 这些类称
  • python数据挖掘分析案例python_吴裕雄 数据挖掘与分析案例实战(4)——python数据处理工具:Pandas...

    导入模块 import pandas as pd import numpy as np 构造序列 gdp1 pd Series 2 8 3 01 8 99 8 59 5 18 print gdp1 取出gdp1中的第一 第四和第五个元素 p
  • verilog 四舍五入_IEEE 754 round-to-nearest-even Verilog代码

    IEEE 754 round to nearest even IEEE 754浮点数标准里面 对于取整的规定 浮点数的舍入任何有效数上的运算结果 通常都存放在较长的暂存器中 当结果被放回浮点格式时 必须将多出来的位元丢弃 有多种方法可以用来
  • el-checkbox中使用indeterminate 状态

    indeterminate 属性用以表示 checkbox 的不确定状态 一般用于实现全选的效果
  • 数学建模列题整理2

    微分方程组的数值模拟 例 某湖泊中有机物新城代谢系统模型的状态方程组 时间 t 是以年为单位 Xs 表示 t 时刻太阳提供的能量 Xp 表示 t 时刻植物生长的数 量 Xh 表示吞食植物的虫类生成数量 Xr 为 t 时刻食虫植物的生长数量
  • 9宫格for循环

    9宫格for循环 总数 NSUInteger totalCount 9 总列数 NSUInteger columnMaxCount 6 总行数 NSUInteger row totalCount columnMaxCount totalCo
  • 解决'webpack-dev-server --inline --progress --config build/webpack.dev.conf.js'

    我的报错 webpack dev server inline progress config build webpack dev conf js 报错截图 解决方法 1 在终端运行指令 npm install webpack dev ser
  • 解决vue图片不刷新问题:浏览器缓存与缓存控制头的终极对决

    在现代Web开发中 许多开发者都曾经遇到过一个令人困扰的问题 当图片URL没有变化但图片内容却发生了变化时 浏览器似乎不会主动刷新图片 从而导致显示旧的内容 这个问题在网站和应用中的图片更新时尤为突出 可能会影响用户体验和页面正确性 在这篇
  • Sourcetree的分支创建与合并

    一 Sourcetree简单介绍 通过Git可以进行对项目的版本管理 但是如果直接使用Git的软件会比较麻烦 因为是通过一条一条命令进行操作的 Sourcetree则可以与Git结合 提供图形界面 使用会方便很多 Git和Sourcetre
  • IDM 6.4.1逆向分析笔记

    环境准备 安装过程不做说明 1 x64dbg 官网地址 https x64dbg com 2 火绒剑 官网地址 https www huorong cn SPY 下载地址 https github com westoncampbell Sp
  • 小程序全局接口文件中限制loading动画在指定页面不显示

    默认加载动画是这样 我这里使用的方法是获取到指定页面的实例对象 然后对他页面地址进行判断 当不是指定页面时才去执行全局的加载动画 先把接口暴露出去 测试接口 var baseURL https aaa bbb cn api 预发布接口 va
  • ftp连接:读取目录列表失败

    本文转载自 http blog csdn net lgm252008 article details 7691182 连接的错误提示 状态 连接建立 等待欢迎消息 返回 220 vsFTPd 2 0 1 命令 USER xiaozhuren
  • 聊一聊会话编程

    HttpSession接口中常用方法 会话的创建 销毁的方法 会话与请求的区别 什么是会话 客户端向服务器发送请求 服务器端接收请求并生成响应返回客户端 客户端对服务器端这样一次连续的调用过程 被称为会话 seccion 登陆访问控制 某些
  • 如何在linux服务器部署sonar服务?

    文章目录 前言 一 上传sonar插件 二 设置sonar插件的权限 三 启动插件 四 配置环境变量 前言 sonar服务是代码质量扫描的工具 我们如何利用sonar进行代码质量扫描还有在linux服务器上部署呢 下面这篇文章详细的记录了我
  • 【Python基础知识整理】

    一 Python的基本信息 1 Python的起源 Python的创始人是吉多 范罗苏姆 Python的创作过程 吉多对于Python的定位 2 Python的基本工作机制 一个用编译性语言比如C或C 写的程序可以从源文件 即C或C 语言
  • SVN 解决冲突

    版本冲突原因 假设 A B 两个用户都在版本号为 100 的时候 更新了 kingtuns txt 这个文件 A 用户在修改完成之后提交 kingtuns txt 到服务器 这个时候提交成功 这个时候 kingtuns txt 文件的版本号
  • 逻辑回归的总结(详细步骤)

    什么是逻辑回归 逻辑回归虽然名字中带有回归 但是并不是一个回归模型 而是一个分类模型 逻辑回归的目的就是解决分类问题 最常用的就是解决二分类问题 逻辑回归和线性回归的关系 逻辑回归 Logistic Regression 与线性回归 Lin
  • Linux修改文件所有者和用户组

    一 修改文件所有者 修改的用户必须在 etc passwd文件中 etc passwd记录用户信息 chown change owner的简写 修改文件的所有者 chown R 所有者名称 文件或目录 R 递归 将子目录下文件全部修改 二
  • 关于 Vulkan 简介 —— Android N 引入新的 3D 渲染引擎

    关于 Vulkan Vulkan 被视作是 OpenGL 的后续产品 它是一种多平台 API 可支持开发人员准备游戏 CAD 工具 性能基准测试等高性能图形应用 它可在不同的操作系统 比如 Windows Linux 或 Android 上