Tag Archives: Vulkan

Vulkan大闷锅之结局

到这里,该创建该准备的,都基本就绪了。接下来就是绘图过程。 如果没有出错,结束的之后,你可以看到这个:

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Pipeline

吸取了前几代Api设计的教训,Vulkan采用了Monolith结构的PSO(Pipeline State Objects),是不是有当年Linux内核的既視感。这段时间疯狂发展的微服务,不知道在未来会不会也走回头路。 敢说Monolith,当然是包含的巨量的状态信息: Dynamic State Vertex Input State Input Assembly State Rasterization State Color Blend State Viewport State Depth Stencil State Multisample State

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Vertex Buffer

Modern OpenGL中,我们至少需要配置VBO和VAO,不过Vulkan只需创建好Vertex Buffer,类似VAO的信息将属于后续Pipeline的一部分。

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之着色器

着色器(Shader)这个概念应该很熟悉。Vulkan采用用一种低层的着色器语言——SPIRV。通常我们还是先写出GLSL,再编译成SPIRV,官方的源码包已经提供了多种编译工具。 编译出的字节码首先会传递给Shader Module。但在创建Shader Module之前,先演示一下如何编译。

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之RenderPass

Render Pass(渲染通道?),提供渲染过程所需的信息。手动配置一堆静态数据(减少动态开销?)。Render Pass由一系列Subpass聚合而成,每个Subpass携带特定的Attachment——笼统地分为Color Attachment或Depth Attachment。这些信息将决定后续Buffer中的数据如何被对待。

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Descriptor

上一章,我们创建了Uniform Buffer,不过着色器并不能直接访问它。这时我们需要一个Descriptor,类似于不透明的句柄。试想,是否可以绑定多个Buffer给分别的Descriptor。Vulkan已经提供了相当的机制Descriptor Set。这里也可以创建多个Set为不同的用途,比如Uniform和Texture。

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之Buffers

你可曾熟悉这两句代码: OpenGL中,我们只要告诉全局上下文,启用深度缓冲(Depth Buffer)。然后,就没有然后了。 当然,以Vulkan的设计哲学,想用Depth Buffer?自己配置。

Posted in 屠龙之技 | Tagged | 1 Comment

Vulkan大闷锅之Swapchain

简述 当前的图形渲染过程并不是画好每帧画面,就立即输出,而是一个Swapchain结构,其主要目的是解决画面撕裂。现在会有多张画面缓存在Swapchan,然后依次输出最上层的一张,每一次的输出操作被称为Present。每个Present动作会将当前帧输出到Surface(上一章已经创建好)。 游戏视效设置中的多重缓冲选项,本质就是在调整Swapchain队列尺寸。

Posted in 屠龙之技 | Tagged | 5 Comments

Vulkan大闷锅之核心机制

到此,队列(Queue)的信息已经准备好,但这里仍需验证物理设备和GUI组建。 创建Surface 这里可选的组建非常多,以下只演示XCB的创建方式。你可能需要一个宏定义: 以下是XCB Surface的信息结构:

Posted in 屠龙之技 | Tagged | Leave a comment

Vulkan大闷锅之启程

事出有因 现在回想起来,那已经是几周前的事了。这是个干燥的上午,我正迷失在信息流中,角落的一行文字引起了注意,“OpenGL已经过时了”。过时了?不等我收拾心神,赶紧Google。霎时间,屏幕上迸出几个大字——V-u-l-k-a-n 。 Vulkan?干什么用的?能吃么? 就在那时,空气中弥漫着对无知的恐惧。吓得我赶紧学习了一下。 简述 Vulkan算是后继OpenGL的图形接口(不过Vulkan正式发布后,OpenGL居然还更新了…)。为保证准确性,本系列文不打算延伸,其核心的目标是,让程序跑起来。由于Vulkan诞生时间尚短,而且热度不高,仅凭网上几篇文档,让程序正常运行真的是有点难度。 本系列文不是一个教程,而是一个参考。如果你和之前的我一样,花了大量时间,结果程序都跑不起来先。那么,欢迎阅读以下内容。

Posted in 屠龙之技 | Tagged | Leave a comment