ImGui(https://github.com/ocornut/imgui)という、OpenGLやDirectXで動作するGUIライブラリがあります。今回は、ImGuiのリポジトリにある、exampleフォルダー内の、example_sdl_opengl3を実行してみようと思います。
ファイル構成
CMakeを使ってBuildしたので、下記のような構成にしています。
├───dependencies
│ ├───IMGUI
│ │ ├───backends
│ │ │ └───vulkan
│ │ └───CMakeLists.txt
│ └───SDL2
├───CMakeLists.txt
└───main.cpp
main.cppは、IMGUIのexample_sdl_opengl3のmain.cppです。
SDL2はIMGUIには入っていないので、別途自分でダウンロードし、Buildしました。
なお、SDL2のインストールには次の記事も参考にしてください。
https://www.ryostudy.com/2023/01/18/sdl2-with-cmake/
CMakeLists.txt
フォルダ内に2つCMakeLists.txtがありますが、それぞれの内容は以下のとおりです。
cmake_minimum_required (VERSION 3.8)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED true)
project ("ImguiTest" VERSION 0.0)
set (BUILD_PATH "${PROJECT_SOURCE_DIR}/build")
set (SDL2_DIR "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/cmake/SDL2")
find_package(SDL2 CONFIG REQUIRED)
add_subdirectory ("${PROJECT_SOURCE_DIR}/dependencies/IMGUI")
set (IMGUI_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/dependencies/IMGUI)
add_executable (${CMAKE_PROJECT_NAME} "${PROJECT_SOURCE_DIR}/main.cpp")
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
${SDL2_INCLUDE_DIRS}
${IMGUI_INCLUDE_DIRS}
)
target_link_libraries(${CMAKE_PROJECT_NAME}
Imgui
${SDL2_LIBRARIES}
OpenGL32
)
set (RUN_TIME_LIBS
${PROJECT_SOURCE_DIR}/dependencies/SDL2/bin/SDL2.dll
)
install(FILES ${RUN_TIME_LIBS} DESTINATION ${CMAKE_BINARY_DIR})
LinuxでCMake Installすると、特に設定をせずとも、find_packageで所望のライブラリを発見できますが、Windowsで開発していたので、SDL2_DIR 変数を設定しています。
OpenGLを使うので、忘れずにtarget_link_librariesにOpenGL32を追加しておきましょう。
SDLにはランタイムライブラリがあるので、buildした先にコピーできるように、installコマンドを設定しています。
dependenciesディレクトリ内のCMakeLists.txtは以下のとおりです。
set (IMGUI_SRC
imgui.cpp
imgui_demo.cpp
imgui_draw.cpp
imgui_tables.cpp
imgui_widgets.cpp
backends/imgui_impl_sdl.cpp
backends/imgui_impl_opengl3.cpp
)
message("IMGUI_SRC: ${IMGUI_SRC}")
add_library(Imgui ${IMGUI_SRC})
target_include_directories(Imgui PUBLIC
${PROJECT_SOURCE_DIR}/dependencies/IMGUI
${PROJECT_SOURCE_DIR}/dependencies/IMGUI/backends
${SDL2_INCLUDE_DIRS}
)
target_link_libraries(Imgui
${SDL2_LIBRARIES}
)
ImGuiのbackendsディレクトリには多数のsource codeがありますが、それらすべてが実行に必要なわけではなく、SDLかつOpenGL3で動かすには、imgui_impl_sdl.cpp、imgui_impl_opengl3.cppの2つで十分です。
Build
以下のコマンドを順次実行していきます。
cd path/to/project_dir
mkdir build
cd build
cmake -S .. -B . -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
cmake --build .
cmake --install .
.\ImguiTest.exe
コンパイルにMinGWを使っているので、あらかじめインストールしておいてください。Ninjaでもできました。
https://www.mingw-w64.org/downloads/