赞
踩
这里使用译者的开发环境:
Ubuntu(操作系统)
CMake(构建系统)
CLion(IDE)
g++/clang(编译器)
本文不按原文翻译
PS: Linux大法好,Mac贵,Windows浪费生命
设置开发环境,有一些基本的知识你得会。比如:
Ubuntu包:g++/clang
你也可以安装clang,然后通过update-alternatives命令切换默认c++编译器,或通过CMake修改c++编译器。
Ubuntu包:cmake
Ubuntu包:vulkan-tools libvulkan-dev vulkan-validationlayers-dev spriv-tools
在Linux上开发Vulkan应用时,你需要一些重要的内容:Vulkan加载器、验证层和一组测试你机器是否支持Vulkan的命令行实用程序:
vulkaninfo
和vkcube
工具。运行它们以确定你的机器是否支持Vulkan。Vulkan就安装好了。你可以通过vkcube
指令测试一下,如果成功你会看到如下窗口:
如果你收到了错误消息,你要确保你安装了最新的驱动程序,确保其包含Vulkan运行时,确保你的显卡支持Vulkan。你可以回顾介绍章节,找到供应商的驱动程序链接,以获取支持。
Ubuntu包:libglfw3-dev
如前所述,Vulkan是一个平台无关的API,而且它不包含任何创建显示渲染结果的窗口的接口。为了受益于跨平台并不使用X11,我们使用GLFW库创建窗口,它支持Windows、Linux和MacOS。也有一些别的库可以使用,像SDL,但GLFW 的优势在除了创建窗口之外,还抽象了一些其它特定于平台的内容。
Ubuntu包:libglm-dev
与DirectX12不同,Vulkan不包含用于线性代数运算的库。GLM是一个很好的库,设计用于图形API,常常用于OpenGL。它是一个只有头文件的库。
Ubuntu包:没有glslc
我们要自己装,从这里下载非官方包,然后安装到/usr/local/
文件夹(把install目录里面的内容都拷贝过去就行,拷贝时记得加上sudo
权限)。
现在,我们只需要一个将文本着色器代码编译为字节码的程序。
有两个比较流行的编译器:Khronos Group的glslangValidator
和Google的glslc
。glslc
用起来像gcc
或clang
,我们用它。你可以执行glslc
试一下,应该会输出以下内容:
glslc: error: no input files
我们会在着色器模块一章深入了解glslc
。
我们从这里获取源码。
然后,我们在源码目录新建一个CMakeFiles.txt:
# 设置cmake版本 cmake_minimum_required(VERSION 3.12) # 新建项目 project(VulkanTutorial) # 设置使用c++17 set(CMAKE_CXX_STANDARD 17) ################################################################################ # find glslc # package: https://github.com/google/shaderc/blob/main/downloads.md find_program( GLSLC_COMMAND name glslc PATHS /bin /usr/bin /usr/local/bin ) if (GLSLC_COMMAND) message(STATUS "Found glslc ${GLSLC_COMMAND}") else () message(FATAL_ERROR "NOT fount glslc") endif () ################################################################################ # glm # target: glm::glm # ubuntu package: libglm-dev find_package(glm REQUIRED) if (glm_FOUND) message(STATUS "Found glm(${GLM_VERSION})") else () message(FATAL_ERROR "NOT found glm") endif () ################################################################################ # glfw3 # target: glfw # ubuntu package: libglfw3-dev find_package(glfw3 REQUIRED) if (glfw3_FOUND) message(STATUS "Found glfw3(${glfw3_VERSION})") else () message(FATAL_ERROR "NOT found glfw3") endif () ################################################################################ # Vulkan # target: Vulkan # ubuntu package: vulkan-tools libvulkan-dev vulkan-validationlayers-dev spriv-tools find_package(Vulkan REQUIRED) if (Vulkan_FOUND) message(STATUS "Found Vulkan") else () message(FATAL_ERROR "NOT found Vulkan") endif () # 添加子目录 add_subdirectory(code)
然后,我们在code目录新建一个CMakeFiles.txt:
# 获取所有源码文件 file(GLOB SRCS *.cpp) foreach (SRC ${SRCS}) # 获取文件名 get_filename_component(NAME ${SRC} NAME_WE) # 每个源码文件都生成一个可执行程序 add_executable(${NAME} ${SRC}) # 链接库 target_link_libraries( ${NAME} Vulkan::Vulkan glm::glm glfw ) endforeach () # 生成spv(TODO)
可通过命令行启动第一个窗口:
# 首先进入到源码目录,之后执行以下目录
# 新建文件夹,用于生成
mkdir build
# 进入build目录
cd build
# 由CMake生成Makefile项目
cmake ..
# 生成 00_base_code
make 00_base_code
# 执行程序
./code/00_base_code
执行以上命令之后,可以看到一个黑色的窗口。
OK,正式开搞。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。