Vulkan 通过 CMake 集成 Dear ImGUI

一、 目录与文件部署

从官网获取 IMGUI 代码库,在项目 extern 目录下新建 imgui 目录,将相关文件复制进去,构建出如下目录结构:

.
├── build
├── extern
│   ├── glfw
│   ├── glm
│   └── imgui
│       ├── backends
│       │   ├── imgui_impl_glfw.cpp
│       │   ├── imgui_impl_glfw.h
│       │   ├── imgui_impl_vulkan.cpp
│       │   └── imgui_impl_vulkan.h
│       ├── imconfig.h
│       ├── imgui_demo.cpp
│       ├── imgui_draw.cpp
│       ├── imgui_internal.h
│       ├── imgui_tables.cpp
│       ├── imgui_widgets.cpp
│       ├── imgui.cpp
│       ├── imgui.h
│       ├── imstb_rectpack.h
│       ├── imstb_textedit.h
│       ├── imstb_truetype.h
│       └── LICENSE.txt
└── stb

二、CMakeLists 配置 - 接入 ImGUI 依赖

(一)路径与文件设置

CMakeLists.txt 中,添加 ImGUI 相关配置:

# 设置外部库目录及各库路径
...
set(IMGUI_ROOT ${EXTERNAL_LIB_DIR}/imgui) 

# 递归收集源文件
file(GLOB_RECURSE SOURCE_FILES src/*.cpp src/*.c)

(二)构建与链接 ImGUI 库

# 构建 imgui 静态库,指定实现文件
add_library(imgui STATIC
    ${IMGUI_ROOT}/imgui.cpp
    ${IMGUI_ROOT}/imgui_demo.cpp
    ${IMGUI_ROOT}/imgui_draw.cpp
    ${IMGUI_ROOT}/imgui_widgets.cpp
    ${IMGUI_ROOT}/imgui_tables.cpp
    ${IMGUI_ROOT}/backends/imgui_impl_glfw.cpp
    ${IMGUI_ROOT}/backends/imgui_impl_vulkan.cpp
)

# 配置 imgui 头文件包含目录
target_include_directories(imgui PUBLIC
    ${IMGUI_ROOT}
    ${GLFW_ROOT}/include
    $<TARGET_PROPERTY:Vulkan::Vulkan,INTERFACE_INCLUDE_DIRECTORIES>
)

# 查找 Vulkan 库
find_package(Vulkan REQUIRED)

# 链接库到项目
target_link_libraries(${PROJECT_NAME} PRIVATE
    Vulkan::Vulkan
    imgui     
    ${GLFW_LIB}
)

三、主代码集成 - main.cpp 中 ImGUI 接入

(一)头文件引入

...
#include <imgui/imgui.h>
#include <imgui/backends/imgui_impl_glfw.h>
#include <imgui/backends/imgui_impl_vulkan.h>

#include "renderer/VkRenderer.h"
#include "scene/Camera.h"
#include "ObjModelLoader.h"
#include "GltfModelLoader.h"
#include "HelloRect.h"

(二)初始化与回调

GLFWwindow* window;
const uint32_t WIDTH = 1920;
const uint32_t HEIGHT = 1000;
Camera camera(glm::vec3(5.0f, 5.0f, 5.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 1.0f), 45.0f, 0.01f, 1000.0f);
VkContext vkcontext{
   
   };

// 帧缓冲大小变化回调
static void framebufferResizeCallback(GLFWwindow* window, int width, int height) {
   
   
    vkcontext.framebufferResized = true;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值