ImGui v1.88编译提示无RenderPlatformWindowsDefault成员等错误
ImGui v1.88 启用多视口报标识符未定义错误解决方案
问题复现
编译早前编写的旧ImGui项目时,已确认当前使用的ImGui版本为v1.88,编译阶段触发系列报错,检索公开资料未找到对应解决方案。
涉及多视口启用的逻辑代码如下:
ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) { ImGui::UpdatePlatformWindows(); ImGui::RenderPlatformWindowsDefault(); }
Visual Studio 活动错误列表提示如下:
Error (active) E0020 identifier "ImGuiConfigFlags_ViewportsEnable" is undefined Error (active) E0135 namespace "ImGui" has no member "UpdatePlatformWindows" Error (active) E0135 namespace "ImGui" has no member "RenderPlatformWindowsDefault"
根本原因
v1.88版本的ImGui主分支正式发布源码中,多视口(Viewports)属于实验性功能,默认不参与编译:
- 对应功能宏
ImGuiConfigFlags_ViewportsEnable、相关接口UpdatePlatformWindows/RenderPlatformWindowsDefault默认被预处理器屏蔽 - 若拉取的是master分支的v1.88 tag源码,本身就没有合入多视口功能的实现代码,仅靠修改配置宏无法启用功能
修复步骤
- 首先将现有ImGui源码替换为v1.88版本对应的docking分支源码,master分支的v1.88正式版未合入多视口实现,仅改配置无法解决问题
- 打开ImGui根目录下的
imconfig.h配置头文件,找到#define IMGUI_HAS_VIEWPORT行,取消该行的注释,打开视口功能的编译开关;如果需要同步使用停靠布局功能,可以一并取消#define IMGUI_HAS_DOCK的注释 - 检查项目属性中的预处理器定义项,确认没有添加
IMGUI_DISABLE_VIEWPORT这类强制关闭视口功能的宏定义 - 清空Visual Studio的项目编译中间文件、删除旧的IntelliSense缓存,重新生成整个解决方案,之前的标识符未定义报错就会消失
注意:启用多视口后要确认配套的渲染后端(如Win32+DX11/GLFW+OpenGL后端)也支持多视口特性,否则运行时会出现子窗口拖出主窗口后渲染异常的问题。
内容的提问来源于stack exchange,提问作者Maurice Moss
相关产品推荐
相关产品推荐

