初识Vulkan
Vulkan是Khronos组织制定的“下一代”开放的图形显示API,是与DirectX12可以匹敌的GPU API标准。Vulkan是基于AMD的Mantle API演化而来,目前Vulkan 1.0标准已经完成并正式发布。
上一代的OpenGL|ES并不会被遗弃,还会继续发展,很有可能OpenGL|ES变为Vulkan的简化API。
Vulkan 技术交流 QQ群 175250233
Vulkan的优势
与OpenGL|ES相比Vulkan的优势:
l 更简单的显示驱动层
Vulkan提供了能直接控制和访问底层GPU的显示驱动抽象层, 显示驱动只是对硬件薄薄的封装,这样能够显著提升操作GPU硬件的效率和性能。之前OpenGL的驱动层对开发者隐藏的很多细节,现在都暴露出来。Vulkan甚至不包含运行期的错误检查层。驱动层干的事情少了,隐藏的bug也就少了。
l 支持多线程
Vulkan不再使用OpenGL的状态机设计,内部也不保存全局状态变量。显示资源完全由应用层负责管理,包括内存管理、线程管理、多线程绘制命令产生、渲染队列提交等。应用程序可以充分利用CPU的多核多线程的计算资源,减少CPU等待,降低延迟。 带来的问题是,线程间的同步问题也由应用程序负责,从而对开发人员的要求也更高。
l 预编译Shaders
驱动层不提供前端shader编译器,只支持标准可移植中间表示二进制代码(SPIR-V)。即提高了执行Shaders的效率又增加了将来着色语言的灵活性。
所以目前的GLSL/HLSL可以直接通过工具转换为SPIR-V,在Vulkan中使用。这样就可以使用离线的shader编译。
另外,SPIR-V还支持OpenCL!
l 跨平台
支持桌面、移动设备、游戏主机、嵌入式……只要需要显示的地方,貌似都能支持。
这也是Vulkan与DirectX12相比的优势。
Vulkan与多线程
OpenGL|ES不支持多线程一直被广为诟病。Vulkan开始设计之处就考虑多线程问题,可以说就是为了多线程而设计的。
命令缓冲和和命令调度队列是Vulkan支撑多线程的重要组成部分,类似OpenGL的上下文状态。
Vulkan的命令缓冲都是独立的互不干扰的单元,支持在多个线程中创建。这样就可以由多个线程创建不同的绘制命令,由单独的线程管理渲染命令队列,统一提交给GPU绘制,如下图所示:
Vulkan窗口系统集成
Vulkan把显示设备的创建和窗口系统的创建明确分开。显示设备只提供支持可视化的显示队列的接口,应用程序控制如何显示绘制结果。比如前后显示缓冲这些的都由应用程序创建和设置。
Vulkan提供标准的扩展API支持多窗口系统,如Android、Windows、X等窗口系统。
Vulkan SDK
Khronos并没有提供开发Vulkan程序的SDK。要开发Vulkan应用,就需要使用由Valve资助的一个叫LunarG的公司开发的LunarG SDK。另外还需要下载最新的支持Vulkan的显卡驱动程序。
Vulkan周边的辅助开发工具基本都是开源的,但不幸的是LunarG的网站目前还在墙外,下载个SDK都很费劲。可以在 Vulkan 技术交流 QQ群 175250233中下载。
Vulkan API
To be continued…
初识Vulkan的更多相关文章
- [学习Vulkan之一] 初识Vulkan
Vulkan是Khronos组织制定的"下一代"开放的图形显示API,是与DirectX12可以匹敌的GPU API标准.Vulkan是基于AMD的Mantle API演化而来,目 ...
- 初识Vulkan【转】
Vulkan是Khronos组织制定的“下一代”开放的图形显示API.是与DirectX12能够匹敌的GPU API标准. Vulkan是基于AMD的Mantle API演化而来,眼下Vulkan 1 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
随机推荐
- scrapy选择器主要用法
# 命令行输入:scrapy shell +链接,会自动请求url,得到的相应默认为response,开启命令行交互模式 scrapy shell http://doc.scrapy.org/en/l ...
- Spring Cloud学习笔记-002
搭建Spring Cloud注册中心:Eureka 服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号.版本号.通信协议等一些附加信息告诉注 ...
- html学习之简单注册表单
<html> <head> <title>新用户注册</title> <meta charset="utf-8"> &l ...
- 用PHP如何实现这种乘法口诀表?
用PHP如何实现这种乘法口诀表? 1x1=1 ,1x2=2 ,1x3=3 ,.....,1x9=9 2x2=4 ,2x3=6 ,......,2x9=18 ........ ...... 8x8=64 ...
- python中关于文件的读取和写入
open()和close()方法:使用python的内置函数open()打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file object = open(file_name ...
- 【django之admin,单例模式】
一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...
- Centos常用命令之:ls和cd
在使用centos这个linux系统的时候,我们总是免不了需要查看当前目录中的内容,需要切换到别的目录,新建删除等等一系列在window中非常普通的操作. 那在linux中这些操作是什么样的呢. 在l ...
- [USACO 08DEC]Secret Message
Description Bessie is leading the cows in an attempt to escape! To do this, the cows are sending sec ...
- hdu5601 BestCoder Round #67 (div.2)
N*M bulbs Accepts: 94 Submissions: 717 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 655 ...
- 关于jsp中的文件下载
第一种采用转发的方式: package cn.jbit.download.servlet; import java.io.IOException; import javax.servlet.Reque ...