CLionでVulkan Programmingをしている人が見当たらなかったので執筆。
学生だと,Visual Studioが買えない人も多いと思うので,是非参考にしてほしい。噂によるとMacではVisual Studioのサポートが終了するらしいので,Mac勢もぜひこのタイミングで切り替えてもらえればと。
動作環境
執筆日時: 2024/02/02
C:\Windows\System32>neofetch
llllllllllllllll llllllllllllllll
llllllllllllllll llllllllllllllll --------------
llllllllllllllll llllllllllllllll OS: Windows 11
llllllllllllllll llllllllllllllll Build: 23H2 (22631)
llllllllllllllll llllllllllllllll Uptime: 8 days, 2 hours, 31 minutes
llllllllllllllll llllllllllllllll Resolution: 3840x2160 @60Hz
llllllllllllllll llllllllllllllll Terminal: C:\Windows\system32\cmd.exe - neofetch
llllllllllllllll llllllllllllllll CPU: 13th Gen Intel(R) Core(TM) i5-13500
llllllllllllllll llllllllllllllll GPU: NVIDIA GeForce RTX 4060 Ti
Memory: 21549 MB / 32542 MB (66% in use)
llllllllllllllll llllllllllllllll Disk: C:\ 953.04 GB (770.59 GB free)
llllllllllllllll llllllllllllllll
llllllllllllllll llllllllllllllll Mem%: -=[ //////////////////// ]=-
llllllllllllllll llllllllllllllll
llllllllllllllll llllllllllllllll Disk%: -=[ //////////////////// ]=-
llllllllllllllll llllllllllllllll
llllllllllllllll llllllllllllllll
llllllllllllllll llllllllllllllll
llllllllllllllll llllllllllllllll
特記環境
筆者の環境は次のようになっている。困ったらそろえてほしい。
ディレクトリ | 用途 |
---|---|
D:/usr/local | 非特権バイナリのインストール先 |
D:/usr/bin | バイナリのシンボリックリンク先で,パスが通っている |
D:/usr/lib | ライブラリのインストール先 |
D:/usr/src | ソースコードの置き場,ビルドしてlibやらlocalやらにリンクを張りがち |
D:/bin, C:/bin | D:/usr/binへのリンク |
D:/lib, C:/lib | D:/usr/libへのリンク |
Linuxともちょっと変えているのでご注意を.
Vulkanのダウンロード
LunarG vulkanをダウンロードすればよい.
このリンクの一番下のWindowsアイコンを押し,その中にあるSDKとラインタイムを適当に入れる.自分はD:\lib\Vulkan以下にSDKを入れた.
CLion起動後にやったこと
ビルドツールの設定
Visual Studio Build Toolsは,C++によるデスクトップ開発があればよい.
vcpkg
vcpkgはC系向けのpipみたいなもんです.
CLionのエディタ画面の左側から,Vcpkgのカラムを開いて,+ボタンからリポジトリを追加する.
1つのリポジトリにvcpkgがローカルバージョンを用意し,その中に色々入れていくので基本はライブラリ構成が変わるたびに作るのがいいだろう.ディスクの大きさと要相談.
名前とディレクトリ名を適切に設定し,チェックを全部いれたら作成.マニフェストモードに変更.
glfw3, glm, spdlogを取り合えず入れる.
CmakeLists.txt
cmake_minimum_required(VERSION 3.27)
project(hdit_demo_game CXX)
set(CMAKE_CXX_STANDARD 20)
if(DEBUG)
add_compile_definitions(DEBUG)
endif()
find_package(spdlog CONFIG REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE
spdlog::spdlog_header_only
)
find_package(glfw3 CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE
glfw
)
find_package(glm CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE
glm::glm
)
find_package(Vulkan REQUIRED)
target_include_directories(${PROJECT_NAME} PRIVATE ${Vulkan_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${Vulkan_LIBRARIES})
Cmakeのカラムでぐるぐる矢印ボタンを押すと,CMakeLists.txtをもとに環境を整えてくれる.CTRL+F5で実行可能.
overview
Cmakeでは主にfind_package, target_include_directories, target_link_librariesの三つを組み合わせて記述する.初心者なのでマルチプラットフォーム性は排除する.
find_packageはライブラリのcmakeを探索して,変数に色々代入してくれる.
target_link_librariesはプロジェクトに対して静的ライブららいや動的ライブラリをリンクしてくれる.-lspdlogオプションのようなものといえばわかりやすいか.target_include_librariesは,そのライブラリのヘッダーなどをインクルードディレクトリに追加してくれる.
test
#include "spdlog/spdlog.h"
#include "vulkan/vulkan.hpp"
int main() {
spdlog::trace("this is a trace");
spdlog::info("this is a information");
spdlog::error("this is a error");
spdlog::critical("this is a critical error");
VkApplicationInfo application_info{};
application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
application_info.apiVersion = VK_API_VERSION_1_0;
application_info.pApplicationName = "VulkanAppAdcal2018";
VkInstanceCreateInfo instance_create_info{};
instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
instance_create_info.pApplicationInfo = &application_info;
auto err = vkCreateInstance(&instance_create_info, nullptr, &_instance);
if (VK_SUCCESS != err) {
spdlog::error("error: {}", err);
abort();
}
return 0;
}
これで特にエラーが起こらなければ構築のノリはできているんじゃないだろうか.
環境で困ったら
ライブラリの依存関係で困ったとき
cmake-build-debugを削除すればよい.cmakeのぐるぐる矢印ボタンを押したら再生成される.
ライブラリが破損したっぽいとき
vcpkgのリポジトリを再度やり直せばなんだかんだよい.
参考資料