
Vulkan
克劳德D
这个作者很懒,什么都没留下…
展开
-
Vulkan【5】创建一个命令缓冲区
创建一个命令缓冲区本节的代码是 04-init_command_buffer.cpp基本的命令缓冲区操作在其他图形API中,应用程序可以通过像glLineWidth()这样的API调用来设置诸如线宽之类的属性。在后台,驱动程序将这个API调用转换为特定于gpu特定的命令,并将该命令放入一个命令缓冲区中。出于应用程序的考虑,驱动程序也通过创建和销毁命令缓冲区来管理命令缓冲区。最终,驱动程...翻译 2018-08-04 13:27:25 · 2990 阅读 · 1 评论 -
Vulkan【15】图形管线(Graphics Pipline)
创建图形管线本节的代码是 14-init_pipeline.cpp你越来越接近把这些拉到一起来渲染一个立方体!下一步是通过设置图形管道来配置GPU来进行渲染。一个图形管线由着色阶段、管线布局、渲染过程和固定功能管线阶段组成。您在前面的部分中定义了着色阶段和管线布局。在这里,您将配置其余的固定功能管线阶段。这包括填充一些用于创建管线的“create info”数据结构。在这里执行的大部分...翻译 2018-09-07 16:35:03 · 3805 阅读 · 0 评论 -
Vulkan【14】顶点缓冲区
创建顶点缓冲区本节的代码是 13-init_vertex_buffer.cpp顶点缓存是一个CPU可见的和GPU可见的缓冲区,它包含了描述您想要呈现的对象(s)的几何图形的顶点数据。一般来说,顶点数据由位置(x、y、z)数据和可选的颜色、法线或其他信息组成。和其他3D api一样,这里的方法是用这个顶点数据填充缓冲区,并在绘制操作期间将其传递给GPU。创建顶点缓冲区对象创建一个...翻译 2018-09-07 15:32:10 · 1675 阅读 · 0 评论 -
Vulkan【13】FrameBuffers
创建Framebuffers本节的代码是 12-init_frame_buffers.cppVulkan FramebufferFramebuffer表示一个渲染过程实例所使用的内存附件集合。这些内存附件的例子包括我们在以前的示例中创建的颜色图像缓冲区和深度缓冲。framebuffer提供了渲染过程所需的附件。在之前的交换链示例中,您创建了一个交换链,它为交换链中的每个“frame...翻译 2018-09-07 13:40:59 · 1757 阅读 · 0 评论 -
Vulkan【12】着色器
着色器本节的代码是 11-init_shaders.cpp编译 GLSL 着色器 为 SPIR-VVulkan的底层着色器代码是SPIR-V。示例程序将GLSL编写的着色器代码编译为 SPIR-V,通过下面这个工具函数:GLSLtoSPV(VK_SHADER_STAGE_VERTEX_BIT, vertShaderText, vtx_spv);The shader sourc...翻译 2018-09-07 09:54:56 · 1891 阅读 · 0 评论 -
Vulkan【11】渲染过程
创建一个渲染过程本节的代码是 10-init_render_pass.cpp渲染过程通过指定在渲染操作期间使用的附件、子过程和依赖项的集合来描述渲染操作的范围。一个渲染过程由至少一个子过程组成。将这些信息与驱动程序通信,使驱动程序能够知道在呈现开始时将会发生什么,并为呈现操作设置最优的硬件。首先使用vkCreateRenderPass()来定义渲染过程,然后使用vkCmdBeginRe...翻译 2018-09-07 09:41:59 · 3491 阅读 · 0 评论 -
Vulkan【10】创建描述符集合
创建描述符集合本节的代码是 09-init_descriptor_set.cpp回到“管线层”示例,你定义了描述符集合层,但并没有真正为它分配内存。回想一下,您定义的描述符集用于通知GPU如何将uniform 缓冲区中包含的数据映射到shader程序的统一变量。现在,您可以继续分配和初始化描述符集合。描述符池与命令缓冲区一样,描述符集合是从池中分配的。所以您必须首先创建池。因为您知...翻译 2018-09-04 11:23:37 · 1299 阅读 · 0 评论 -
Vulkan【9】描述符集合布局和管线布局(Descriptor Set Layouts and Pipeline Layouts)
描述符集合层和管线层本节的代码是 08-init_pipeline_layout.cpp在前面的例子中,您创建了一个uniform 缓冲区,但是您没有告诉着色器该如何使用它。缓冲区包含了MVP转换的Uiform变量,它只会被顶点着色器使用,但是Vulkan还不知道这一点。我们通过使用描述符来实现这一点。描述符和描述符集合描述符是一个特殊的不透明的着色器变量,着色器使用它以间接的...翻译 2018-09-01 14:38:26 · 3428 阅读 · 0 评论 -
Vulkan【8】创建Uniform缓冲区
创建Uniform缓冲区本节的代码是 07-init_uniform_buffer.cppUniform缓冲区是一个访问只读着色器的缓冲区,以便着色器可以读取常量参数数据。这是另一个你必须在Vulkan程序中执行的步骤。在GLES中,你只需要做一个API调用来设置发送给着色器的统一变量的内容。而在这里,你必须分配内存并将其填充。设置 Uniform 数据样例使用Uniform缓...翻译 2018-09-01 13:57:19 · 2010 阅读 · 0 评论 -
Vulkan【7】创建深度缓冲区
创建深度缓冲区本节的代码是 06-init_depth_buffer.cpp深度缓冲区是可选的,但在示例最后渲染3D方块时,你需要一个深度缓冲区。而且在渲染每帧时,你只需要一个,即使交换链里有不止一个图像。因为深度缓冲区在交换链的图像中是可重用的。与vkCreateSwapchainKHR()不同的是,交换链中的每一个图像都是为你创建的,你需要创建和分配您自己的图像来表示深度缓冲。...翻译 2018-08-23 14:53:54 · 1735 阅读 · 0 评论 -
Vulkan【6】创建一个交换链
创建一个交换链本节的代码是 05-init_swapchain.cpp本节描述如何创建交换链,它是最终显示给用户的图像缓冲区列表。这是建立呈现所需的所有缓冲区所需的第一个步骤之一。这是一个关于交换链的视图,它与系统的其他部分有关。其中一些部分很常见,剩下的部分将在本节中学习。Vulkan和窗口系统与其他图形API一样,Vulkan将窗口系统方面与核心图形API分离开来。...翻译 2018-08-20 11:21:43 · 4437 阅读 · 0 评论 -
Vulkan【3】列举物理设备
列举物理设备这一节的代码文件是 02-enumerate_devices.cpp示例程序的下一步是确定系统上的物理设备。在您创建了一个实例之后,加载器知道有多少Vulkan物理设备可用,但是您的应用程序还不知道这一点。应用程序通过访问Vulkan API来获取一个有多少可用物理设备的列表。物理设备与实例相关,如上图所示。从Vulkan获取对象列表获取对象列表是Vulka...翻译 2018-08-03 10:26:11 · 2993 阅读 · 0 评论 -
Vulkan【2】创建Vulkan实例
创建Vulkan实例本节的源代码是 01-init_instance.cppVulkan程序的第一步是创建一个Vulkan实例。当你阅读到本节的时候,可以在LunarG Vulkan 示例代码仓库中 API-Samples文件夹下找到01-init_instance.cpp Vulkan实例Vulkan API使用 vkInstance 对象 来存储 所有每个应用的状态。应用程...翻译 2018-08-02 17:06:16 · 6953 阅读 · 0 评论 -
Vulkan【1】介绍
Vulkan介绍Vulkan是由Khronos组织开发的一种高级图形API。其他图形API(像OpenGL和Direct3D)需要驱动去将上层API翻译成适合硬件执行的指令。这些图形API是为了使开发者不需要关注复杂的图形硬件细节。随着那些较老的图形API继续发展,它们会慢慢地将越来越多的底层硬件功能直接暴露给程序员。 程序员被要求访问底层硬件,权衡那些具有较高开销和较低性能的功能的...翻译 2018-08-02 15:48:22 · 7467 阅读 · 0 评论 -
Vulkan教程(官方教程翻译版)
欢迎来到Vulkan示例教程本教程以章节的方式一步一步指导你创建一个简单的Vulkan程序。 每个教程章节都对应一个示例程序,可以阅读这个示例程序,并可在实际编码中进行测试。教程目录介绍实例化枚举所有设备初始化设备初始化命令缓冲区初始化交换链初始化深度缓冲区初始化Uniform缓冲区初始化管线布局初始化描述符集合初始化渲染层初始化着色器初始化帧缓冲区初始化...翻译 2018-08-02 15:11:17 · 19274 阅读 · 5 评论 -
Vulkan【4】创建一个逻辑设备
创建一个逻辑设备本节的代码是 03-init_device.cpp下一步是创建一个VkDevice逻辑设备对象,它对应于系统上的一个物理设备。逻辑设备是稍后用于将图形命令定向到硬件的关键对象。到目前为止,我们的示例已经确定了你有多少物理设备。列举这些设备的示例工具函数确保了至少有一个设备,否则它会以不正确的断言停止。选择一个设备为了使事情变得简单,示例只从设备枚举返回的列表中取...翻译 2018-08-09 10:52:56 · 1160 阅读 · 0 评论 -
Vulkan【16】绘制立方体
绘制立方体本节的代码是 15-draw_cube.cpp你快完成了!下面是让你的Vulkan图像出现在屏幕上的最后步骤:等待交换链缓冲区在开始绘制任何东西之前,样例程序需要一个目标交换链图像来呈现。vkAcquireNextImageKHR()函数用于将索引放入交换链图像列表中,因此它知道哪个framebuffer会被用作渲染目标。即下一个可供渲染的图像。res = v...翻译 2018-09-07 17:39:50 · 3515 阅读 · 0 评论