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

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);// 设置不使用OpenGLglfwWindowHint(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中绘制一个三角形。

相关文章:

  • python基础练习题库实验3
  • Canal+Kafka实现MySQL与Redis数据同步(一)
  • 贪吃蛇小游戏
  • typora使用PicGo自动上传图片到chevereto图床
  • Docker简介
  • 选硬币该用动态规划
  • 【漏洞复现】泛微e-Weaver SQL注入
  • ubuntu中/etc/rc.local和/etc/init.d/rc.local的区别是什么
  • zookeperkafka学习
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • Linux操作系统使用及C高级编程-D5Linux shell命令(进程管理、用户管理)
  • 黑马React18: 基础Part 1
  • 遗传算法GA-算法原理与算法流程图
  • 搭建 AI 图像生成器 (SAAS) php laravel
  • python django 小程序博客源码
  • 【知识碎片】第三方登录弹窗效果
  • css选择器
  • Docker容器管理
  • Docker入门(二) - Dockerfile
  • EventListener原理
  • HashMap ConcurrentHashMap
  • java8 Stream Pipelines 浅析
  • JavaScript DOM 10 - 滚动
  • Java比较器对数组,集合排序
  • Js基础知识(四) - js运行原理与机制
  • MySQL几个简单SQL的优化
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • ucore操作系统实验笔记 - 重新理解中断
  • 聊聊sentinel的DegradeSlot
  • 前言-如何学习区块链
  • 如何解决微信端直接跳WAP端
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ###项目技术发展史
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Git) gitignore基础使用
  • (论文阅读30/100)Convolutional Pose Machines
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)我也是一只IT小小鸟
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .gitignore文件---让git自动忽略指定文件
  • .htaccess配置重写url引擎
  • .Net IE10 _doPostBack 未定义
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • .stream().map与.stream().flatMap的使用
  • @JsonSerialize注解的使用