Dear ImGui 提供了广泛的编译时配置选项,允许您自定义行为、针对特定平台进行优化、调整渲染以及控制包含的功能。本文档将介绍如何通过 imconfig.h 文件配置 Dear ImGui 以及可用的配置选项。
有关通过样式设置进行运行时配置的信息,请参阅 样式和主题。
Dear ImGui 提供了两种配置编译时选项的方式:
您可以直接修改默认的 imconfig.h 文件。这是最简单的方法,但需要在更新 Dear ImGui 时维护您的更改。
推荐的方法是创建您自己的配置文件,并将 IMGUI_USER_CONFIG 定义指向它。
这允许您仅覆盖所需选项,同时保持与未来 Dear ImGui 更新的兼容性。
重要: 配置设置在所有使用 Dear ImGui 的编译单元中必须保持一致,因为某些选项会影响数据结构的布局。请在您的代码中使用 IMGUI_CHECKVERSION() 来验证一致性。
Dear ImGui 的配置选项可以分为几类:
您可以自定义断言的处理方式。
Dear ImGui 可以配置为使用自定义内存分配器。
来源:imconfig.h17-20 imconfig.h50
这些选项控制在使用动态库时 Dear ImGui 函数的导出或导入方式。
注意:不建议通过共享库使用 Dear ImGui,因为这会带来函数调用开销和 ABI 兼容性问题。
您可以禁用 Dear ImGui 的部分功能以减小代码大小。
| 配置选项 | 效果 |
|---|---|
IMGUI_DISABLE | 禁用所有功能(所有头文件和源文件都将变为空)。 |
IMGUI_DISABLE_DEMO_WINDOWS | 禁用演示窗口(ShowDemoWindow/ShowStyleEditor)。 |
IMGUI_DISABLE_DEBUG_TOOLS | 禁用指标/调试器窗口。 |
IMGUI_DISABLE_OBSOLETE_FUNCTIONS | 移除已弃用的函数,以鼓励更新代码。 |
IMGUI_DISABLE_WIN32_FUNCTIONS | 不使用任何 Win32 函数(剪贴板、IME)。 |
IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS | 不实现 ImFormatString/ImFormatStringV。 |
IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS | 不实现 ImFabs/ImSqrt 等数学函数。 |
IMGUI_DISABLE_FILE_FUNCTIONS | 禁用所有文件 I/O 函数。 |
IMGUI_DISABLE_DEFAULT_FONT | 移除默认嵌入字体,节省约 9.5 KB。 |
字体系统有几个配置选项,用于控制渲染、字符集支持以及与外部库的集成。
来源:imconfig.h69 imconfig.h84-95 misc/freetype/imgui_freetype.h9-13 misc/freetype/README.md9-51 misc/freetype/imgui_freetype.cpp49-65
默认情况下,Dear ImGui 使用 16 位字符 (ImWchar),这涵盖了 Unicode 的基本多语言平面。要获得完整的 Unicode 支持,
这启用了对表情符号、装饰符号、古老语言以及 BMP 之外的其他字符的支持。
Dear ImGui 可以使用 FreeType 进行更高质量的字体渲染,而不是默认的 stb_truetype。
要使用 FreeType,请:
vcpkg install freetype --triplet=x64-windows)。FreeType 配置标志可以通过 ImFontConfig::FontBuilderFlags 或 ImFontAtlas::FontBuilderFlags 设置。
| 标志 | 目的 |
|---|---|
ImGuiFreeTypeBuilderFlags_NoHinting | 禁用提示,以获得更模糊的字形。 |
ImGuiFreeTypeBuilderFlags_NoAutoHint | 禁用自动微调器。 |
ImGuiFreeTypeBuilderFlags_ForceAutoHint | 优先使用自动微调器而不是字体的原生微调器。 |
ImGuiFreeTypeBuilderFlags_LightHinting | 更轻微的提示,类似于 ClearType。 |
ImGuiFreeTypeBuilderFlags_MonoHinting | 为单色输出提供强力提示。 |
ImGuiFreeTypeBuilderFlags_Bold | 人为加粗字体。 |
ImGuiFreeTypeBuilderFlags_Oblique | 倾斜字体(模拟斜体)。 |
ImGuiFreeTypeBuilderFlags_Monochrome | 禁用抗锯齿。 |
ImGuiFreeTypeBuilderFlags_LoadColor | 启用彩色分层字形。 |
ImGuiFreeTypeBuilderFlags_Bitmap | 启用位图字形。 |
Dear ImGui 可以通过 FreeType 在 OpenType 字体中渲染 SVG 字形,有两种实现方式:
注意:您只能启用其中一个选项,并且必须同时启用 FreeType。
来源:misc/freetype/imgui_freetype.h27-38 misc/freetype/README.md32-54 misc/freetype/imgui_freetype.cpp49-65
来源:imconfig.h62-63 imconfig.h115-125
您可以定义构造函数和隐式转换运算符,以便在您的数学类型和 ImGui 的向量类型之间无缝转换。
来源:imconfig.h54-55 imconfig.h127-133
这些选项控制 Dear ImGui 对嵌入式 STB 库的使用。
以下是为您的项目配置 Dear ImGui 的典型工作流程:
Dear ImGui 的配置系统提供了强大的方式来定制库以满足您的特定需求。无论您是采用直接方法还是自定义配置文件方法,都可以控制功能、优化性能并与现有的代码库和数学库集成。
请记住,配置选项会影响数据结构的布局,因此它们在所有编译单元中必须保持一致。请始终在您的应用程序中使用 IMGUI_CHECKVERSION() 来验证配置的一致性。
有关将 Dear ImGui 集成到您的应用程序中的更多信息,请参阅 基本集成。