
vulkan
vulkan学习
旅客
从事C++开发
展开
-
Vulkan Tutorial 0 vulkan学习笔记 写在前面
目前在一家公司走内核开发,整个内核框架涉及到数据的读取,空间变换,显示这些东西。最近突然萌生了一种想要给内核扩展一下显示能力集。目前市面上主要是OpenGL/DirectX/Vulkan。之所以选择Vulkan,主要是因为内核需要跨平台,因此DX被排除。OpenGL据说在多线程上有天生的缺陷,因此也被排除。所以,最终选择Vulkan。本来想买一个本书看看,但是目前市面上好像没有中文版的教程,能...原创 2018-12-07 15:48:34 · 523 阅读 · 0 评论 -
Vulkan Tutorial 1 创建vulkan实例
在使用vulkan做任何操作之前,首先需要创建一个vulkan的vkInstance实例。下图为vulkan的基本架构:上图显示,应用程序被链接到一个称为Loader的vulkan库。Loader也会加载和初始化低级图形驱动程序。同样,layer也会通过Loader被加载到应用程序。Layer一般用来验证驱动程序执行的错误。正是因为vulkan将错误验证功能交给layer,所以vulk...原创 2018-12-07 18:06:19 · 864 阅读 · 0 评论 -
Vulkan Tutorial 2 枚举物理设备
创建完Vulkan实例后,需要查找当前可用的硬件设备,其实就是GPU之类的一些图形设备。而一旦创建Vulkan实例,Vulkan就知道有些什么可用的设备。所以,可调用Vulkan的vkEnumeratePhysicalDevices获取设备。设备和Vulkan的关系类似以下方式: ...原创 2018-12-10 17:38:04 · 491 阅读 · 0 评论 -
Vulkan Tutorial 3 创建逻辑设备
Vulkan逻辑设备其实就对应一个相应的物理设备。逻辑设备用于向硬件设备发送绘制指令。因为我的电脑目前只有一个物理设备,同时为了简单起见,gpus指定第0个元素。设备队列和队列族Vulkan将设备队列暴露给外部,因此,程序员可知道目前哪些队列正在使用,哪些类型的队列正在被使用。这点跟其他图形api不一样。因此程序员可以更灵活的控制。队列是向硬件提交指令的抽象概念。Vulkan将...原创 2018-12-12 13:42:49 · 415 阅读 · 3 评论 -
Vulkan Tutorial 4 创建命令缓冲区
基本命令缓冲区操作OpenGL里面设置线宽的时候,是通过调用glLineWidth()。如下图所示,驱动程序将这个API调用转换为特定于GPU的指令,并且放入命令缓冲区。驱动程序负责管理这个缓冲区的创建和销毁,并且负责将命令缓冲发送给GPU去处理缓冲里面指令,应用程序不需要关心这些操作。在Vulkan里面,调用vkCmdSetLineWidth()来设置线宽。此函数实际上是新增一个指令到命...原创 2018-12-12 18:06:34 · 477 阅读 · 0 评论 -
Vulkan Tutorial 5 创建交换链
交换链是图片的列表。其中一个图片在前台显示,其他图片在后台。Vulkan的绘制会在后台图片上进行一些列的绘制操作,直到绘制完成,然后交换前台图片和绘制完成的后台图片。此时,当前后台图片成为前台图片,当前前台图片成为后台图片。交换链如下所示: Vulkan和视窗系统与其他图形API一样,Vulkan也将视窗系统与核心图形API分离。在Vulkan中,窗口系统...原创 2018-12-18 15:48:04 · 657 阅读 · 0 评论 -
Vulkan Tutorial 6 创建深度缓冲
深度缓冲是可选的,如果要绘制3D图形,可使用深度缓冲。即使交换链以后多个图像,也只需要一个深度缓冲,因为深度缓冲在绘制交换链的每个图片时,深度缓冲是可重用的。与交换链不同,交换链是Vulkan创建内存,深度缓冲必须自己分配图片的内存来作为深度缓冲。步骤如下:创建深度缓冲图像对象 申请深度缓冲设备内存 将内存绑定到图像对象 创建深度缓冲图像视图创建深度缓冲图像对象创建深度...原创 2018-12-18 18:03:50 · 532 阅读 · 0 评论 -
Vulkan Tutorial 7 创建Uniform Buffer
Uniform Buffer可以以只读方式访问着色器,以便着色器可以读取常量参数数据。在Vulkan里面,程序员必须自己创建Uniform Buffer,在其他API里面则不需要。设置Uniform数据程序可使用Uniform缓冲将MVP(Model-View-Projection)矩阵传入着色器,着色器通过MVP数据对每一个顶点进行变换。info.Projection = gl...原创 2019-01-09 16:55:08 · 727 阅读 · 0 评论 -
Vulkan Tutorial 8 管道布局
描述符集合布局与管道布局创建完Uniform Buffer后,接下来就是要告诉着色器如何使用。程序员知道Uniform Buffer里面存储的是MVP数据,以及MVP数据会被顶点着色器使用,但是Vulkan目前还不知道。这些都是通过描述符告诉Vulkan的。描述符与描述符集合描述符是一个特殊的不透明着色器变量,着色器使用它以间接的方式访问缓冲区和图像资源。描述符可以被看做是一个纸箱资源...原创 2019-01-14 16:28:03 · 461 阅读 · 0 评论 -
Vulkan Tutorial 9 描述符集合
在上一节定义了一个描述符集合布局,但是并没有实际创建。描述符集合用于告诉GPU,uniform buffer是如何映射到着色器程序的uniform变量。本节介绍描述符集合的创建和初始化。描述符池与明亮缓冲类似,描述符集合也是冲池里面创建的,所以必须先创建一个池。对于一个uniform buffer,只需要一个描述符集合,因此创建一个池非常简单:VkDescriptorPoolSize...原创 2019-01-29 17:54:54 · 398 阅读 · 0 评论