当前位置: 首页 > article >正文

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 <GLFW/glfw3.h>
#include <cstdlib>
#include <iostream>
#include <stdexcept>
#include <vector>

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实现绘制三角形的类

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


http://www.kler.cn/a/133260.html

相关文章:

  • Gitcode文件历史记录查看和还原
  • C语言之MakeFile
  • Excel模板下载\数据导出
  • 服务器上安装Orcale数据库以及PL SQL工具(中文)
  • 如何实现主备租户的无缝切换 | OceanBase应用实践
  • 智慧建造-运用Trimble技术将梦幻水族馆变为现实【上海沪敖3D】
  • 二叉树最近公共祖先
  • 腾讯云服务器价格计算器真心好用,推荐给大家!
  • linux在非联网、无网络环境下,使用yumdownload、reportrack方法安装rpm包
  • oracle-buffer cache
  • Python调用企微机器人: 发送常用格式汇总
  • C++各种字符转换
  • 常用的软件架构设计模式
  • 【算法挨揍日记】day31——673. 最长递增子序列的个数、646. 最长数对链
  • python-opencv五种自动白平衡算法,附源码直接可用(均值、完美反射、灰度世界、动态阈值、基于图像分析的偏色检测及颜色校正)
  • Flutter笔记:Matrix4矩阵变换与案例
  • 安卓手机投屏到电视,跨品牌、跨地域同样可以实现!
  • hive sql 行列转换 开窗函数 炸裂函数
  • 对象与this
  • PS学习笔记——初识PS界面
  • sql server 多行数据合并一行显示
  • MyBatis学习
  • 麻将馆电脑计费系统,棋牌室怎么用电脑控制灯计时,佳易王计时计费系统软件下载
  • 浏览器里设置代理的作用
  • 【Linux】kernel与应用消息队列的一种设计
  • Redis篇---第七篇