一、环境
[VSCode ](https://code.visualstudio.com/)
[MingW64 ](https://www.mingw-w64.org/downloads/)
[CMake ](https://cmake.org/download/)
[GLFW ](https://www.glfw.org/)
[GLM ](https://github.com/g-truc/glm/)
二、准备
- 准备文件存放路径 。在根目录新建一个文件夹命名3rd(以后新建项目直接把3rd文件夹拖拽到VSCode方便使用),3rd文件夹下新建 include 和 lib 两个文件夹。
- GLFW 复制GLFW文件夹下的include文件夹里面的glfw文件夹到3rd下的include里;复制GLFW下lib-mingw-w64文件夹到3rd下lib目录里重命名glfw。
- GLM 复制GLM里面的glm文件夹到3rd文件夹下的include里。
- Vulkan 复制VulkanSDK安装目录下的Include到3rd文件夹下的include重命名vulkan;复制VulkanSDK安装目录下的Lib文件夹到3rd文件夹下的lib里面重命名vulkan。
- 此时位于根目录下的3rd文件结构如下:
3rd文件夹 - include - - glfw - - glm - - vulkan - lib - - glfw - - vulkan
三、创建
1、VSCode新建C++项目:一个main.cpp空文件,一个CMakeLists.txt空文件。 2、把第二步准备的3rd文件夹拖拽到项目根目录下(不添加3rd到项目,直接在CMakeLists.txt中修改引用也行,只是编写代码的时候不能自动提示,无法跳转到相应函数):
3、编写CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
set(PROJECT_NAME MyFirstVulkanDemo)
project(${PROJECT_NAME} VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 11)
# 项目用到的三方库路径
set(3RD_PATH ${PROJECT_SOURCE_DIR}/3rd)
# 头文件
set(3RD_INCLUDE ${3RD_PATH}/include)
include_directories(${3RD_INCLUDE})
# 库文件
set(3RD_LIBS ${3RD_PATH}/lib)
FIND_LIBRARY(GLFW_LIB glfw3 ${3RD_LIBS}/glfw)
FIND_LIBRARY(VULKAN_1_LIB vulkan-1 ${3RD_LIBS}/vulkan)
link_libraries(${GLFW_LIB} ${VULKAN_1_LIB} )
# 执行编译命令
set(MAIN ${PROJECT_SOURCE_DIR}/main.cpp )
add_executable(${PROJECT_NAME} ${MAIN} )
# 复制 glfw3.dll 到编译目录下
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${3RD_PATH}/lib/glfw/glfw3.dll
$<TARGET_FILE_DIR:${PROJECT_NAME}>/
)
4、编写main.cpp
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>
#include <iostream>
int main()
{
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
GLFWwindow* window = glfwCreateWindow(800, 600, "My First Vulkan Window", nullptr, nullptr);
uint32_t extensionCount = 0;
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
std::cout << extensionCount << " extensions supported" << std::endl;
glm::mat4 matrix;
glm::vec4 vec;
auto test = matrix * vec;
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
以上代码保存,系统会自动新建一个build文件夹,进入build文件夹,分别执行命令:cmake … 和mingw32-make 最后运行生成的文件出现一个空白窗体,本次不调试用不到VSCode的json配置,至此Vulkan VSCode环境搭建测试完毕。
四、问题
1、编译出现undefined reference to `vkEnumerateInstanceExtensionProperties’,是vulkan-1库没有连接,正确连接后问题解决。
五、参考
TalesOV
|