日本語のグラフィックスプログラミング資料は限られており、英語リソースが主流です。ソフトウェアレンダリングを実装した後、光ラスタライゼーションの理解が深まります。ソフトレンダリングとソフトレイトライティングの習得がグラフィックス開発の基礎となります。
Vulkanの学習には線形代数の基礎知識が必須です。OpenGLはブラックボックスで詳細な最適化が困難ですが、Vulkanはすべての処理を明示的に実装する必要があり、CPU-GPU間データ転送の最適化に特化しています。CPUとGPU間のデータ転送がパフォーマンスボトルネックとなるケースでは、Vulkanの採用が有効です。
学習リソース
- Vulkan公式サイト - APIリファレンスとサンプルコード
- SaschaWillemsのGitHub - 実践的なサンプルプロジェクト
- 公式ドキュメント『Vulkan Programming Guide』
Vulkanサポート確認
システムがVulkanをサポートするか確認するには、サンプルアプリを実行します:
vulkan_cube
立方体の回転が表示されれば、Vulkanが利用可能です。
開発環境構築
CMakeを用いたC++17環境構築のディレクトリ構成:
| ディレクトリ | 用途 |
|---|---|
| cmake | CMake設定ファイル |
| sandbox | 実験用プロジェクト |
| src | ソースコード |
| toy2d | シンプルなグラフィックスサンプル |
CMake設定例
FindSDL2.cmakeの実装:
if (NOT TARGET SDL2)
if (WIN32)
set(SDL2_INSTALL_DIR "${CMAKE_SOURCE_DIR}/libs/SDL2" CACHE PATH "SDL2インストールパス")
set(SDL2_INCLUDE_DIR "${SDL2_INSTALL_DIR}/include")
set(SDL2_LIB_DIR "${SDL2_INSTALL_DIR}/lib/x64")
add_library(SDL2::SDL2 SHARED IMPORTED GLOBAL)
set_target_properties(
SDL2::SDL2
PROPERTIES
IMPORTED_LOCATION "${SDL2_LIB_DIR}/SDL2.dll"
IMPORTED_IMPLIB "${SDL2_LIB_DIR}/SDL2.lib"
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}"
)
else()
find_package(SDL2 REQUIRED)
add_library(SDL2 ALIAS SDL2::SDL2)
endif()
endif()
CopyDLL.cmakeの実装:
macro(CopyVulkanDLL target_name)
if (WIN32)
add_custom_command(
TARGET ${target_name} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${SDL2_INSTALL_DIR}/lib/x64/SDL2.dll" $
)
endif()
endmacro()
FindVulkan.cmakeの実装:
find_package(Vulkan REQUIRED)