opengl 安装_Vulkan介绍与安装

本文介绍了Vulkan作为一款低开销、跨平台的图形API,其复杂性在于需要大量代码实现基本功能,但同时也提供了更大的优化空间。尽管对于新手来说学习曲线较陡峭,但其优势在于对底层代码的控制,从而实现更高效的图形渲染。文章还详细指导了如何在Windows上配置Vulkan、GLFW和GLM库,以进行初步的开发环境搭建。
摘要由CSDN通过智能技术生成

7344e1650e815b0c487b3a089d003bcd.png
Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口(API),最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。

介绍

在维基百科上搜索Vulkan,可以发现本篇的开头就是摘自它的部分介绍。冗长的介绍这里不做复制,毕竟Vulkan又名"Verbose",Verbose除了能翻译为"冗长的",我觉得翻译成"啰嗦的"更为贴切, 它的"啰嗦"不仅体现在要实现图形学的hello world程序"三角形绘制"需要上千行代码,这对于熟悉Opengl程序的开发人员来讲是不可想象的,甚至比自己用CPU实现一套软光栅器更为复杂!同时也体现在它的api复杂难懂,对于入门图形学的新手来讲并不是太简单。基于此我们不禁会问那学这个有意义么?我觉得是有意义的,在维基百科上对Vulkan的介绍都是围绕着低开销这个主题吹牛皮,怎么实现低开销?或许下面这个公式可以解释:

more control = more optimisation

解释过来的意思就是:提供更多的底层代码控制权限,意味着提供了更多的优化空间。知道这个意思后,我们对Vulkan的复杂性或许多了那么一丝丝包容,但是正如程序员英伟达所言:

由于OpenGL的复杂度和维护难度比Vulkan低很多,在多数情况下也能提供理想的整体性能,现阶段OpenGL仍是个很好的选择。 ——英伟达

英伟达说的意思其实很直白:Vulkan虽然给开发者提供了更多的自由度,如果这个开发者本身不自由(非大牛),那用回Opengl也是个不错的选择。原因就在于如果开发者对内存管理机制,对程序运行机制没有十足的理解,那就可能会误用Vulkan乃至乱用Vulkan导致运行的效率甚至比原有的Opengl运行效率更低,那这样就得不偿失。

安装

1.打开lunarXchange网站,windows平台选择1.1.108.0版本。(lunarG是一个专门从事视频卡设备驱动程序开发的公司,在2009年成立,2014年与Valve合作,合作目的是想把尚未完成的Vulkan驱动程序并入其Steam OS的未来版本。在2015年lunarG分成了两支团队,一支团队由Valve出于上述目的进行开发的桌面团队,另一支并入了Google Android团队,提供Android平台的Vulkan支持。)

d12f614eada3e25cd0fe2c4f92d6bc31.png
lunarXchange网站

下载后双击该安装文件。

2. 点击"I Agree"。

f9335808f56e7d04fc52c21d86f74373.png

3. 选择路径后点击Install。

a2f491670beaea4c0b99f9783974b703.png

4.安装完成后点击Finish。

1dbb75d4fdf253e6fbcb6921c18253d6.png

5. 由于Vulkan没有提供窗口创建功能,所以在使用Vulkan前还需要下载窗口创建相关的库,这里我们选择GLFW。跳转至GLFW下载页,点击32-bit Windows binaries按钮下载。(使用32位是因为稳定性考虑,很多人使用64位的库发现运行出错,甚至运行不成功)。

f5aa73bcbaff89b7826ac669cedb692a.png

6. 下载完成后进行解压,解压后把刚刚的文件夹重命名为GLFW,并放在VulkanSDK文件夹下。

192d5a95640dab18e12d969d526fcb50.png

7. 下载GLM库,该库是针对OpenGL的数学库,为了方便数学运算,我们选择下载该库。跳转至GLM链接下载。

c0dedbc47f73267a0ec92bc480837be0.png

8. 点击页面中的Downloads(上图红框所示),跳转至GLM数学库的下载页面。

aaad244c45330744593a8698eff5a494.png

9. 点击"glm-0.9.9.8.zip"下载并解压,并放至VulkanSDK文件夹下,进入文件夹内部,删掉其余文件夹,只保留glm文件夹即可。

080580c4770464213e4718b13f9dc3df.png

10. 回退至上一级文件夹,并把glm文件夹重命名为GLM。

782a1c6f8800b6580d967b2adfb78504.png

11. 打开Visual Studio 2019,创建新项目。

9f6d1a4dd54239f278937ff83960e4be.png

12. 选择空项目。

c559c1a7345c2e772a584de87775df28.png

13. 项目名称命名为VulkanProject。并点击创建。

9f7ba6cad0e63954c4f3e719abae1856.png

14. 点击项目属性,出来属性页后,点击C/C++项。

027b344863c51d8e0a1e5bcd600a6d69.png
项目属性项

61cbee0fb885a81ca17c5fde0b2f3783.png

15. 点击附加包含目录,分别定位Vulkan,GLFW以及GLM库的位置。

5b28ea773d6bcedeb424c58bb7ade0b2.png

16. 点击链接器附加库目录

14e7bfd8d2c4761018076dc9525ce1a2.png

17. 编辑附加库目录,这里选择Lib32的原因是因为我们之前下的GLFW库就是32位的,所以得对应上。

fffd67594b408a287688dd3710ce4286.png

18. 接着点击链接器输入选项,配置附加依赖项的内容分别为vulkan-1.lib与glfw3.lib,点击确定并应用。

e0d7903a5b12522bfbd68ff75ea6ce39.png

19. 接着测试GLFW,Vulkan以及GLM库是否工作良好,可在源文件目录下新建main.cpp文件,并键入下述代码:

// 会自动包含vulkan.h
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

// 计算时强制使用弧度值
#define GLM_FORCE_RADIANS
// opengl的深度值是从-1~1,我们需要转换深度值为0~1
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/glm.hpp>
#include <glm/mat4x4.hpp>
#include <iostream>

int main() {
	// 初始化glfw
	glfwInit();
	glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
	GLFWwindow* window = glfwCreateWindow(1024, 720, "Vulkan", nullptr, nullptr);
	uint32_t extCount = 0;
	vkEnumerateInstanceExtensionProperties(nullptr, &extCount, nullptr);
	printf("Extension count: %in", extCount);
	glm::mat4 testMatrix(1.0f);
	glm::vec4 testVec(1.0f);
	auto testRes = testMatrix * testVec;
	// 窗口是否处于可关闭状态
	while (!glfwWindowShouldClose(window)) {
		glfwPollEvents();
	}
	// 清理窗口对象
	glfwDestroyWindow(window);
	// 退出glfw,它的作用可以清理窗口句柄以及各种初始化的资源等,如果glfwInit调用成功
	// 就必须在程序结束前调用
	glfwTerminate();
	return 0;
}

代码中可以发现我们并没有引入任何的vulkan头文件,这是因为我们通过

#define GLFW_INCLUDE_VULKAN

代码定义了我们需要在GLFW中使用Vulkan,由GLFW库自动帮我们引入:

04cd13c46e3c5ef3cfc024f00246c453.png
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API)

该行代码告诉glfw库,不使用任何内置的图形API,它有如下值:

226b648bb321a457802f0c24b08b5a66.png

20. 运行程序,有看到窗口并且控制台没有报错信息,且输出了值为12(至少不能为0),说明Vulkan开发的相关配置已经搞定。

37669b0df3c2ea846edb5e9b6eb81920.png

Vulkan系列未完待续。。。

喜欢就关注我吧o(* ̄▽ ̄*)ブ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值