菜单

配置选项

相关源文件

Dear ImGui 提供了广泛的编译时配置选项,允许您自定义行为、针对特定平台进行优化、调整渲染以及控制包含的功能。本文档将介绍如何通过 imconfig.h 文件配置 Dear ImGui 以及可用的配置选项。

有关通过样式设置进行运行时配置的信息,请参阅 样式和主题

配置机制

Dear ImGui 提供了两种配置编译时选项的方式:

来源:imconfig.h5-13

直接编辑

您可以直接修改默认的 imconfig.h 文件。这是最简单的方法,但需要在更新 Dear ImGui 时维护您的更改。

自定义配置文件

推荐的方法是创建您自己的配置文件,并将 IMGUI_USER_CONFIG 定义指向它。

这允许您仅覆盖所需选项,同时保持与未来 Dear ImGui 更新的兼容性。

重要: 配置设置在所有使用 Dear ImGui 的编译单元中必须保持一致,因为某些选项会影响数据结构的布局。请在您的代码中使用 IMGUI_CHECKVERSION() 来验证一致性。

来源:imconfig.h5-13

核心配置类别

Dear ImGui 的配置选项可以分为几类:

来源:imconfig.h17-133

内存和断言

断言处理程序

您可以自定义断言的处理方式。

内存分配器

Dear ImGui 可以配置为使用自定义内存分配器。

来源:imconfig.h17-20 imconfig.h50

API 符号属性

这些选项控制在使用动态库时 Dear ImGui 函数的导出或导入方式。

注意:不建议通过共享库使用 Dear ImGui,因为这会带来函数调用开销和 ABI 兼容性问题。

来源:imconfig.h22-28

功能控制

禁用组件

您可以禁用 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.h30-52

特定平台集成

剪贴板函数

输入法编辑器 (IME)

Shell 集成

来源:imconfig.h39-45

字体系统配置

字体系统有几个配置选项,用于控制渲染、字符集支持以及与外部库的集成。

来源:imconfig.h69 imconfig.h84-95 misc/freetype/imgui_freetype.h9-13 misc/freetype/README.md9-51 misc/freetype/imgui_freetype.cpp49-65

Unicode 支持

默认情况下,Dear ImGui 使用 16 位字符 (ImWchar),这涵盖了 Unicode 的基本多语言平面。要获得完整的 Unicode 支持,

这启用了对表情符号、装饰符号、古老语言以及 BMP 之外的其他字符的支持。

FreeType 字体渲染

Dear ImGui 可以使用 FreeType 进行更高质量的字体渲染,而不是默认的 stb_truetype。

要使用 FreeType,请:

  1. 将定义添加到您的 imconfig.h 中。
  2. 在您的项目中包含 imgui_freetype.h/cpp。
  3. 获取 FreeType 二进制文件或构建它们(可以使用 vcpkg:vcpkg install freetype --triplet=x64-windows)。

FreeType 配置标志可以通过 ImFontConfig::FontBuilderFlagsImFontAtlas::FontBuilderFlags 设置。

标志目的
ImGuiFreeTypeBuilderFlags_NoHinting禁用提示,以获得更模糊的字形。
ImGuiFreeTypeBuilderFlags_NoAutoHint禁用自动微调器。
ImGuiFreeTypeBuilderFlags_ForceAutoHint优先使用自动微调器而不是字体的原生微调器。
ImGuiFreeTypeBuilderFlags_LightHinting更轻微的提示,类似于 ClearType。
ImGuiFreeTypeBuilderFlags_MonoHinting为单色输出提供强力提示。
ImGuiFreeTypeBuilderFlags_Bold人为加粗字体。
ImGuiFreeTypeBuilderFlags_Oblique倾斜字体(模拟斜体)。
ImGuiFreeTypeBuilderFlags_Monochrome禁用抗锯齿。
ImGuiFreeTypeBuilderFlags_LoadColor启用彩色分层字形。
ImGuiFreeTypeBuilderFlags_Bitmap启用位图字形。

SVG 字体支持

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.h101-113

调试和测试

调试断点

测试引擎

来源:imconfig.h54-55 imconfig.h127-133

与外部库集成

STB 库

这些选项控制 Dear ImGui 对嵌入式 STB 库的使用。

来源:imconfig.h71-82

配置工作流程

以下是为您的项目配置 Dear ImGui 的典型工作流程:

来源:imconfig.h5-13

结论

Dear ImGui 的配置系统提供了强大的方式来定制库以满足您的特定需求。无论您是采用直接方法还是自定义配置文件方法,都可以控制功能、优化性能并与现有的代码库和数学库集成。

请记住,配置选项会影响数据结构的布局,因此它们在所有编译单元中必须保持一致。请始终在您的应用程序中使用 IMGUI_CHECKVERSION() 来验证配置的一致性。

有关将 Dear ImGui 集成到您的应用程序中的更多信息,请参阅 基本集成