From e876381caa7a07c822878996dc7ef53be8857744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joa=CC=83o=20Amaro=20Lagedo?= Date: Sat, 5 Sep 2026 17:53:23 -0300 Subject: [PATCH 1/4] Point IMGUI_USER_CONFIG at the header's actual name The header is Public/CogImguiConfig.h, but the define spells it CogImGuiConfig.h with a capital G. Windows and case-insensitive macOS volumes resolve it anyway; on a case-sensitive filesystem every translation unit that reaches imgui.h fails with "'CogImGuiConfig.h' file not found". --- Plugins/Cog/Source/CogImgui/CogImgui.Build.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Cog/Source/CogImgui/CogImgui.Build.cs b/Plugins/Cog/Source/CogImgui/CogImgui.Build.cs index c4edd413..c4823d18 100644 --- a/Plugins/Cog/Source/CogImgui/CogImgui.Build.cs +++ b/Plugins/Cog/Source/CogImgui/CogImgui.Build.cs @@ -39,7 +39,7 @@ public CogImgui(ReadOnlyTargetRules Target) : base(Target) }); } - PublicDefinitions.Add("IMGUI_USER_CONFIG=\"CogImGuiConfig.h\""); + PublicDefinitions.Add("IMGUI_USER_CONFIG=\"CogImguiConfig.h\""); PublicDefinitions.Add("IMGUI_API=COGIMGUI_API"); PublicDefinitions.Add("IMPLOT_API=COGIMGUI_API"); } From b948cab27e55db41a4659e5f1b4bd74112080fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joa=CC=83o=20Amaro=20Lagedo?= Date: Sat, 5 Sep 2026 17:53:23 -0300 Subject: [PATCH 2/4] Include the generated header under the name UHT actually emits UnrealHeaderTool names the generated header after its source file, so this one is CogEngineWindow_NetImGui.generated.h. The include asked for NetImgui.generated.h, which only resolves where the filesystem folds case. --- Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_NetImGui.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_NetImGui.h b/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_NetImGui.h index 2802f0be..5858604a 100644 --- a/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_NetImGui.h +++ b/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_NetImGui.h @@ -3,7 +3,7 @@ #include "CoreMinimal.h" #include "CogCommonConfig.h" #include "CogWindow.h" -#include "CogEngineWindow_NetImgui.generated.h" +#include "CogEngineWindow_NetImGui.generated.h" class UCogEngineWindowConfig_NetImgui; From f1c6d41aecf3e05d6559c9f77ff68b82298e992c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joa=CC=83o=20Amaro=20Lagedo?= Date: Sat, 5 Sep 2026 17:53:37 -0300 Subject: [PATCH 3/4] Do not pass reflected property text as a format string These three calls hand a runtime string straight to ImGui::Text, so any percent sequence in a display name or tooltip is interpreted as a conversion. clang rejects it under -Wformat-security, which is an error in an Unreal editor build. Every other Text call in this file already passes "%s" -- these are inside WITH_EDITORONLY_DATA and were missed. --- .../Source/CogEngine/Private/CogEngineWindow_Inspector.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_Inspector.cpp b/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_Inspector.cpp index bf858cd2..25e1290b 100644 --- a/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_Inspector.cpp +++ b/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_Inspector.cpp @@ -511,7 +511,7 @@ bool FCogEngineWindow_Inspector::RenderProperty(const FProperty* Property, uint8 ImGui::TableNextColumn(); ImGui::Text("DisplayName:"); ImGui::TableNextColumn(); - ImGui::Text(TCHAR_TO_UTF8(*Property->GetDisplayNameText().ToString())); + ImGui::Text("%s", TCHAR_TO_UTF8(*Property->GetDisplayNameText().ToString())); #endif // WITH_EDITORONLY_DATA ImGui::TableNextRow(); @@ -533,7 +533,7 @@ bool FCogEngineWindow_Inspector::RenderProperty(const FProperty* Property, uint8 ImGui::TableNextColumn(); if (Property->HasMetaData("Tooltip")) { - ImGui::Text(TCHAR_TO_UTF8(*Property->GetToolTipText(false).ToString())); + ImGui::Text("%s", TCHAR_TO_UTF8(*Property->GetToolTipText(false).ToString())); } #endif // WITH_EDITORONLY_DATA @@ -551,7 +551,7 @@ bool FCogEngineWindow_Inspector::RenderProperty(const FProperty* Property, uint8 ImGui::BeginTooltip(); ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f); - ImGui::Text(TCHAR_TO_UTF8(*Property->GetToolTipText(false).ToString())); + ImGui::Text("%s", TCHAR_TO_UTF8(*Property->GetToolTipText(false).ToString())); ImGui::Text("Details [CTRL]"); ImGui::PopTextWrapPos(); ImGui::EndTooltip(); From a3bc787665f90a9d7c1fd2c8c7ed9d237ae3a171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joa=CC=83o=20Amaro=20Lagedo?= Date: Sat, 5 Sep 2026 17:53:37 -0300 Subject: [PATCH 4/4] Export FCogLogOutputDevice so other modules can construct the window FCogEngineWindow_OutputLog is COGENGINE_API and holds an FCogLogOutputDevice by value, but the device itself is unexported. On Windows the window's implicit constructor is emitted into the DLL and the device's constructor resolves there. clang emits that implicit constructor in the *consumer's* translation unit instead, so a module calling AddWindow() fails to link with an undefined FCogLogOutputDevice::FCogLogOutputDevice(). --- Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_OutputLog.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_OutputLog.h b/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_OutputLog.h index 0febcf38..9e563eac 100644 --- a/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_OutputLog.h +++ b/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_OutputLog.h @@ -11,7 +11,7 @@ class UCogEngineConfig_OutputLog; class FCogEngineWindow_OutputLog; //-------------------------------------------------------------------------------------------------------------------------- -class FCogLogOutputDevice : public FOutputDevice +class COGENGINE_API FCogLogOutputDevice : public FOutputDevice { public: friend class FCogEngineWindow_OutputLog;