65.9K
CodeProject 正在变化。 阅读更多。
Home

Vulkan Playground: 使用 Visual Studio 2019 的 C++ 轻松入门 Vulkan

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2021年1月17日

MIT

5分钟阅读

viewsIcon

13786

downloadIcon

285

一个高级库, 可以快速轻松地创建 Vulkan 示例

引言

几年前我研究过 Vulkan 3D 图形 API。我遇到了臭名昭著的学习曲线,它结合了冗长的 API 和需要立即理解一些更复杂的概念,以及许多可能压倒大多数人的第三方辅助库。

令我惊讶的是,在我找到 Sascha Willems 出色的教程集之前,示例和教程非常少。事实上,它们太好了,我觉得这可能是为什么很少有人尝试编写类似教程的原因。无论如何,我决定完成基础示例,在创建用于抽象所有公共代码的辅助库的同时重写它们。

当时,我有一个整理代码并在这里发布文章的想法,但像许多想法一样,它被现实所取代。去年我有一些空闲时间,所以我重新审视了代码,整理了一下,并为示例添加了一些基本描述,这就是这篇文章。

什么是 Vulkan Playground

它是一个高级库,使得编写简单的着色器非常容易,并且还将 Vulkan 对象封装到 C++ 类中,这有助于了解 Vulkan API 各部分之间的交互。

不是某种功能齐全的 3D 库或超级优化的生产级别代码。

要了解它的功能,最简单的方法是查看 Sascha 的基础集中的以下示例。原始示例很棒,因为所有代码都主要在一个文件中,但这对于初学者来说可能有点多。在这里,这些示例被分解为带有简单解释的子步骤。每个示例的代码量只有一两页,这使得很容易理解示例背后的高级思想。

运行示例

必备组件

  1. 安装最新的 Windows Vulkan SDK
  2. 安装 Visual Studio 2019 社区版,确保选中 C++。

获取、构建和运行示例

运行 Visual Studio 2019,选择“克隆存储库。然后输入位置“https://github.com/SuperflyJon/VulkanPlayground,如果需要,更改路径,然后单击“克隆注意:您可能需要在 CMake 设置页面的“工具”->“选项”中设置名为“从不自动运行配置步骤”的选项,以阻止 Visual Studio 尝试对文件运行 cmake。

或者,手动克隆存储库,并打开 examples 子文件夹中的 Examples.sln 文件。

F5 或选择“调试”/“开始...”菜单选项之一来构建和运行示例。

10 分钟内绘制你的第一个三角形

首先,确保您拥有上面部分中的先决条件以及 Vulkan Playground 库代码,这些代码可以从上一节的示例或本文的 zip 文件中获取。

创建新项目

打开 Visual Studio 2019,在语言过滤器中选择“C++,然后选择“控制台应用,然后按“下一步

在下一个对话框中,输入一个名称,例如 MyTriangle,以及一个存储文件的位置,然后按“创建”。

现在,通过将下拉菜单从“x86”更改为“x64,将配置更改为 64 位。

从主菜单中选择“视图/其他窗口/属性管理器”以显示属性管理器窗口。在此窗口中右键单击 MyTriangle 项目,然后选择“添加现有属性表...

导航到 Vulkan Playground 库代码所在位置下的 Scripts 文件夹,然后选择 VulkanPlayground.props 文件。

现在用这段代码替换编辑器中的代码

#include <VulkanPlayground\Includes.h>

int main()
{
    class HelloWorldApp : public VulkanApplication {
        void UpdateScene(VulkanSystem& system, float ) override {
            PrintString(10, 50, U"Hello, World!");
        }
    } app;
    WindowSystem::RunWindowed(200, 100, "Hello World!", app);
}

如果尝试构建此代码,代码应该可以编译,但会抱怨未解析的外部符号,我们现在将添加来自 Vulkan Playground 库的代码。

添加 Vulkan Playground 库

从主菜单中选择“文件/添加/现有项目...”。导航到 Vulkan Playground 源位置,然后从 VulkanPlaygroundLibrary 文件夹中选择 VulkanPlayground.vcxproj 项目文件。

现在您需要链接到该库。右键单击三角形项目下的“引用”项,然后选择“添加引用...,单击 Vulkan Playground 旁边的复选框,然后单击 Ok

现在按 F5 构建并运行此测试,您应该会看到一个带有“Hello world!”的窗口。

渲染一个三角形

现在您知道一切正常,请用以下代码替换测试代码,这将绘制一个三角形。

#include <VulkanPlayground\Includes.h>

int main()
{
    class TriangleApp : public VulkanApplication
    {
        void SetupObjects(VulkanSystem& system, RenderPass& renderPass, 
                          VkExtent2D workingExtent) override
        {
            pipeline.LoadShader(system, "Triangle");
            pipeline.SetupVertexDescription({ {1, Attribs::Type::Position, 
                                               VK_FORMAT_R32G32_SFLOAT} });
            CreatePipeline(system, renderPass, pipeline, workingExtent, "TriangleSimple");
            system.CreateGpuBuffer<float>(system, vertexBuffer, 
                   { -.8f, 0.8f,  0.8f, 0.8f,  0.0f, -.8f }, 
                   VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, "Triangle data");
        }

        void DrawScene(VkCommandBuffer commandBuffer) override
        {
            pipeline.Bind(commandBuffer);
            vertexBuffer.Bind(commandBuffer);
            vkCmdDraw(commandBuffer, 
                     (uint32_t)vertexBuffer.GetBufferSize() / pipeline.GetStride(), 1, 0, 0);
        }
        Pipeline pipeline;
        Buffer vertexBuffer;
    } app;

    WindowSystem::RunWindowed(300, 200, "Triangle", app);
}

这段代码相当直接,SetupObject() 首先加载 Triangle 着色器文件(我们稍后会创建)。然后示例设置一个需要成对 float 值才能传递的管道,数据在此示例中是硬编码的。DrawScene() 绑定管道和缓冲区,并调用 Vulkan 命令 vkCmdDraw 来绘制三角形。

现在添加着色器文件。在解决方案资源管理器中右键单击 MyTriangle 项目,然后选择“添加/新建项...。在名称框中将“Source.cpp”替换为“Triangle.vert”,然后单击“添加”。

将以下简单的顶点着色器代码粘贴到编辑器中

#version 450

layout(location = 1) in vec2 inPosition;

void main()
{
    gl_Position = vec4(inPosition, 0.0, 1.0);
}

重复这些步骤添加另一个名为 Triangle.frag 的文件,并将以下代码粘贴到该文件中

#version 450

layout(location = 0) out vec4 outFragColour;    // 0 = colour attachment number

void main()
{
    outFragColour = vec4(vec3(0.8), 1.0);
}

再次运行项目(F5),您应该能看到您的第一个 Vulkan 三角形。

如果您运行的是调试版本,您应该会在控制台窗口中看到大量输出,提示一些幕后工作。

2 分钟内绘制你的第一个三角形

如果您在按照上述说明操作时遇到困难,源代码下载中有一个示例项目,只需打开 Example\Triangle 文件夹中的 Triangle.sln 文件,然后单击运行,您应该能看到一个三角形。

您可以使用这个简单的三角形示例作为创建自己的 Vulkan 示例的起点。

链接

正在使用一些第三方库,详细信息请参阅外部文件夹中的外部 details.txt 文件。

如果您想深入了解细节,这里有一个深入的 Vulkan API 入门教程:here

Sacha 的完整示例集在此处:here,尽管看起来他正在迁移到这个较新的 Vulkan 示例通用位置:github.com/KhronosGroup/Vulkan-Samples.

历史

  • 2021年1月17日:初始版本
© . All rights reserved.