本指南提供了将 Dear ImGui 集成到您的应用程序或游戏引擎的全面说明。它涵盖了核心集成过程、平台和渲染器选择,以及在您的代码库中运行 Dear ImGui 所需的基本设置步骤。
有关特定控件系统的信息,请参阅 控件系统,有关后端特定的实现细节,请参阅 后端系统。
Dear ImGui 的设计采用了模块化架构,将核心用户界面库与平台特定的代码和渲染后端实现分离开来。这种设计允许将其集成到各种平台和渲染 API 中。
集成过程遵循以下基本步骤:
图示:Dear ImGui 集成流程
来源: docs/README.md117-123 examples/example_glfw_vulkan/main.cpp352-534
第一步是初始化 Dear ImGui 上下文并配置基本设置。
您的整个应用程序只需要一个 ImGui 上下文。该上下文包含所有状态,包括窗口、控件、输入和样式信息。
来源: examples/example_glfw_opengl3/main.cpp80-89 examples/example_glfw_vulkan/main.cpp385-394
Dear ImGui 需要两种类型的后端:
图示:Dear ImGui 后端系统架构
来源: docs/README.md122-123 examples/README.txt3-4
根据您的应用程序的窗口系统选择平台后端。
来源: examples/example_glfw_opengl3/main.cpp92-96 examples/example_glfw_vulkan/main.cpp397
根据您的图形 API 选择渲染器后端。
来源: examples/example_glfw_opengl3/main.cpp96 examples/example_glfw_vulkan/main.cpp398-414
集成到应用程序的主循环涉及几个关键步骤:
图示:Dear ImGui 逐帧集成流程
来源: examples/example_glfw_opengl3/main.cpp126-193 examples/example_glfw_vulkan/main.cpp437-517
来源: examples/example_glfw_vulkan/main.cpp445-466 examples/example_glfw_opengl3/main.cpp143-145
来源: examples/example_glfw_vulkan/main.cpp477-492 examples/example_glfw_opengl3/main.cpp156-171
来源: examples/example_glfw_vulkan/main.cpp505-516 examples/example_glfw_opengl3/main.cpp185-191
应用程序关闭时,您需要正确关闭 Dear ImGui。
来源: examples/example_glfw_vulkan/main.cpp522-525 examples/example_glfw_opengl3/main.cpp200-202
Dear ImGui 通过其后端系统支持各种平台。以下是可用的平台后端概述:
图示:Dear ImGui 平台后端选项
对于桌面平台,最常用的后端是:
| 平台后端 | 描述 | 最佳搭配 |
|---|---|---|
| GLFW | 跨平台窗口和输入 API | OpenGL, Vulkan, DirectX, Metal |
| SDL2/SDL3 | 跨平台多媒体库 | OpenGL, Vulkan, DirectX, Metal |
| Win32 | Windows 特有 API | DirectX (9, 10, 11, 12) |
| OSX | macOS 特有 API | Metal |
基础 GLFW 集成示例
来源: examples/example_glfw_opengl3/main.cpp38-96
对于移动平台:
| 平台 | 后端 | 备注 |
|---|---|---|
| Android | imgui_impl_android | 需要 NDK 和额外的输入处理 |
| iOS | imgui_impl_osx | 可能需要针对触摸输入进行平台特定适配 |
对于 Web 平台:
来源: examples/example_glfw_opengl3/main.cpp92-96
Dear ImGui 为各种图形 API 提供了多种渲染器后端。
图示:Dear ImGui 渲染器后端选项
OpenGL 有两个后端实现:
来源: examples/example_glfw_opengl3/main.cpp44-96
DirectX 后端需要适当的设备和上下文初始化。
由于 Vulkan 的显式性质,其设置过程更为复杂。
来源: examples/example_glfw_vulkan/main.cpp191-208 examples/example_glfw_vulkan/main.cpp398-414
Dear ImGui 需要接收输入事件才能正常运行。在大多数情况下,平台后端会自动处理此问题,但您需要了解如何在 ImGui 和您的应用程序之间管理输入分发。
您可以加载自定义字体来替换默认字体
对于非拉丁字符支持,请加载适当的字形范围
为了正确的 DPI 缩放
对于支持独立窗口的应用程序(停靠分支)
| 问题 | 潜在解决方案 |
|---|---|
| 文本丢失/方块代替文本 | 字体图集未正确加载。请检查字体初始化和纹理上传。 |
| 裁剪问题 | 确保在您的渲染函数中正确处理裁剪矩形。 |
| Z轴顺序/深度问题 | 请确保您的渲染管线遵守 Dear ImGui 的深度设置。 |
| 问题 | 潜在解决方案 |
|---|---|
| UI 对输入没有反应 | 检查您是否正确地将输入事件转发给了平台后端。 |
| 错误的控件接收输入 | 很可能是 ID 堆栈冲突。对具有相同标签的控件使用唯一的 ID。 |
| 输入在应用程序中工作,但在 ImGui 中无效 | 确保 io.WantCaptureMouse/io.WantCaptureKeyboard 已正确遵循。 |
将 Dear ImGui 集成到您的应用程序中,需要选择合适的平台和渲染器后端,正确地初始化它们,并实现每帧的循环。虽然初步集成需要理解其架构,但其模块化设计使其能够适应各种应用程序和平台。
有关更详细的信息,请参阅 examples/ 文件夹中的示例代码,其中展示了与各种平台和渲染器组合的集成。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(69d572)