• Vulkan渲染引擎开发教程 一、开发环境搭建


    一 安装 Vulkan SDK

    Vulkan SDK 就是我们要搞的图形接口
    首先到官网下载SDK并安装 https://vulkan.lunarg.com/sdk/home
    在这里插入图片描述

    二 安装 GLFW 窗口库

    GLFW是个跨平台的小型窗口库,也就是显示窗口,图形的载体
    去主页下载并安装,https://www.glfw.org/download.html
    根据你的平台选择包,我是Windows64位系统,所以选择64-bit Windows binaries
    在这里插入图片描述

    三 安装 GLM算法库

    我们还需要一些算法库来减少我们的开发代价
    https://github.com/g-truc/glm

    四 配置VS 2022

    GLFW 和GLM解压放好后亲一口
    在这里插入图片描述
    打开VS 2022,依次点击 VS -> 项目 -> 属性 进入属性面板
    在属性面板中,点击C/C++ -> 常规 -> 附加包含目录
    依次填入Vulkan SDK下的include目录、glm下的glm目录、glfw下的include目录后点确定按钮
    在这里插入图片描述
    再点击连接器->常规->附加库目录
    填写glfw下的lib–vs2022目录、vulkan下的Lib目录,
    点确定

    在这里插入图片描述
    再切换到 连接器下的输入->附加依赖项
    在窗口中填入vulkan-1.lib、glfw3.lib
    写完后 点击确定就完成了配置
    在这里插入图片描述

    五 测试

    在vs中创建新的项目
    在这里插入图片描述
    在脚本中填入以下代码

    #define GLFW_INCLUDE_VULKAN // GLFW_INCLUDE_VULKAN: include the vulkan header
    #include 
    #include 
    #include 
    #include 
    #include 
    
    const int WINDOW_WIDTH = 800; // 窗口宽度
    const int WINDOW_HEIGHT = 600; // 窗口高度
    
    class VulkanApp {
    public:
        GLFWwindow* window; // 窗口指针
        VkInstance instance; // vulkan实例
    
        void run() {
            initWindow(); // 初始化窗口
            createInstance(); // 创建vulkan实例
            loop(); // 主循环
            closeWindow(); // 清理窗口
        }
    
        // 初始化窗口
        void initWindow() {
            glfwInit(); // 初始化窗口
            glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);// 设置不使用OpenGL
            glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);// 禁止窗口大小改变
            // 创建窗口
            window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Vulkan测试", nullptr, nullptr); 
        }
    
        // 主循环
        void loop() {
            while (!glfwWindowShouldClose(window)) {// 如果窗口没有关闭
                glfwPollEvents();
            }
        }
    
        // 清理vulkan实例 和窗口
        void closeWindow() {
            vkDestroyInstance(instance, nullptr);// 清理vulkan实例
            glfwDestroyWindow(window);// 清理窗口
            glfwTerminate();// 清理控制台
        }
    
        //  创建vulkan实例
        void createInstance() {
            VkApplicationInfo appInfo = {}; // 用于向vulkan驱动程序传递信息
            appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; // 指定结构体类型
            appInfo.pApplicationName = "vulkan test"; // 指定应用程序名称
            appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); // 指定应用程序版本
            appInfo.pEngineName = "No Engine"; // 指定引擎名称
            appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); // 指定引擎版本
            appInfo.apiVersion = VK_API_VERSION_1_0; // 指定vulkan版
            VkInstanceCreateInfo createInfo = {}; // 用于指定vulkan实例的扩展和验证层
            createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; // 指定结构体类型
            createInfo.pApplicationInfo = &appInfo; // 指定应用程序信息
            uint32_t glfwExtensionCount = 0; // glfw扩展数量
            const char** glfwExtensions; // glfw扩展
            glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount); // 获取glfw扩展
            createInfo.enabledExtensionCount = glfwExtensionCount; // 指定扩展数量
            createInfo.ppEnabledExtensionNames = glfwExtensions; // 指定扩展
            createInfo.enabledLayerCount = 0; // 指定验证层数量
            if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) { // 创建vulkan实例
                throw std::runtime_error("create instance failed!"); // 创建失败
            } else {
                printf("create instance success!"); // 创建成功
            }
        }
    };
    
    int main() {
        VulkanApp app; // 创建vulkan实例
    
        try {
            app.run(); // 运行vulkan实例
        } catch (const std::exception& e) { // 捕获异常
            std::cerr << e.what() << std::endl; // 输出异常信息
            return EXIT_FAILURE; // 退出程序
        }
    
        return EXIT_SUCCESS; // 退出程序
    }
    
    // 用vulkan实现绘制三角形的类
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85

    运行成功会显示两个窗口,一个是用于显示调试信息的控制台,一个就是用于显示vukan实例的glfw窗口,长这样
    在这里插入图片描述
    在下一章中,将尝试在vulkan中绘制一个三角形。

  • 相关阅读:
    28、iNeRF
    Linux搭建NFS服务器
    Android 协程 异常捕获 异常的传播特性
    【Python】八、函数的使用
    CVM虚拟机创建
    计算机的总线
    ipynb转换为pdf、Markdown(.md)
    Linux.进程操作命令
    Axios进阶
    FPGA:单比特跨时钟域、多比特跨时钟域(更新中)
  • 原文地址:https://blog.csdn.net/lengyoumo/article/details/134481641