diff --git a/engine/core/src/imgui_backend.cpp b/engine/core/src/imgui_backend.cpp index d1ad0e0..46740c1 100644 --- a/engine/core/src/imgui_backend.cpp +++ b/engine/core/src/imgui_backend.cpp @@ -98,23 +98,20 @@ imgui_backend::imgui_backend() { ImGuiPlatformMonitor monitor = {}; - const auto rect = platform::get_monitor_resolution(); - monitor.MainPos = rect.offset; - monitor.MainSize = rect.extent; + const auto monitorArea = platform::get_monitor_resolution(); + monitor.MainPos = monitorArea.offset; + monitor.MainSize = monitorArea.extent; - const auto wrect = platform::get_monitor_work_area(); - monitor.WorkPos = wrect.offset; - monitor.WorkSize = wrect.extent; + const auto workArea = platform::get_monitor_work_area(); + monitor.WorkPos = workArea.offset; + monitor.WorkSize = workArea.extent; monitor.DpiScale = platform::get_monitor_dpi(); platform_io.Monitors.push_back(monitor); platform_io.Platform_CreateWindow = [](ImGuiViewport* viewport) { - viewport->Flags = ImGuiViewportFlags_NoDecoration; - - viewport->PlatformHandle = platform::open_window("", - {viewport->Pos, viewport->Size}, WindowFlags::Borderless); + viewport->PlatformHandle = platform::open_window("", {viewport->Pos, viewport->Size}, WindowFlags::Borderless); }; platform_io.Platform_DestroyWindow = [](ImGuiViewport* viewport) { @@ -127,18 +124,16 @@ imgui_backend::imgui_backend() { platform::set_window_position(viewport->PlatformHandle, pos); }; - platform_io.Platform_GetWindowPos = [](ImGuiViewport* viewport) { - auto [x, y] = platform::get_window_position(viewport->PlatformHandle); - return ImVec2(x, y); + platform_io.Platform_GetWindowPos = [](ImGuiViewport* viewport) -> ImVec2 { + return platform::get_window_position(viewport->PlatformHandle); }; platform_io.Platform_SetWindowSize = [](ImGuiViewport* viewport, const ImVec2 size) { platform::set_window_size(viewport->PlatformHandle, size); }; - platform_io.Platform_GetWindowSize = [](ImGuiViewport* viewport) { - auto [x, y] = platform::get_window_size(viewport->PlatformHandle); - return ImVec2(x, y); + platform_io.Platform_GetWindowSize = [](ImGuiViewport* viewport) -> ImVec2 { + return platform::get_window_size(viewport->PlatformHandle); }; platform_io.Platform_SetWindowFocus = [](ImGuiViewport* viewport) { @@ -178,11 +173,12 @@ void imgui_backend::begin_frame(const float delta_time) { } } - const auto [width, height] = platform::get_window_size(::engine->get_main_window()); - const auto [dw, dh] = platform::get_window_drawable_size(::engine->get_main_window()); + const auto size = platform::get_window_size(::engine->get_main_window()); + const auto drawableSize = platform::get_window_drawable_size(::engine->get_main_window()); - io.DisplaySize = ImVec2(width, height); - io.DisplayFramebufferScale = ImVec2((float)dw / width, (float)dh / height); + io.DisplaySize = size; + io.DisplayFramebufferScale = ImVec2(static_cast(drawableSize.width) / static_cast(size.width), + static_cast(drawableSize.height) / static_cast(size.height)); io.DeltaTime = delta_time; io.KeyCtrl = platform::get_key_down(InputButton::Ctrl); io.KeyShift = platform::get_key_down(InputButton::Shift); diff --git a/engine/renderer/src/imguipass.cpp b/engine/renderer/src/imguipass.cpp index 60fb85e..73675f7 100755 --- a/engine/renderer/src/imguipass.cpp +++ b/engine/renderer/src/imguipass.cpp @@ -72,16 +72,12 @@ void ImGuiPass::create_render_target_resources(RenderTarget& target) { void ImGuiPass::render_post(GFXCommandBuffer* command_buffer, RenderTarget& target, const platform::window_ptr index) { ImDrawData* draw_data = nullptr; - if(platform::is_main_window(index)) { + if(!(ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_ViewportsEnable)) { draw_data = ImGui::GetDrawData(); } else { - auto& io = ImGui::GetPlatformIO(); - for(int i = 1; i < io.Viewports.size(); i++) { - if((io.Viewports[i]->Flags & ImGuiViewportFlags_Minimized) == 0) { - if(io.Viewports[i]->PlatformHandle == index) - draw_data = io.Viewports[i]->DrawData; - } - } + auto viewport = ImGui::FindViewportByPlatformHandle(index); + if(viewport != nullptr) + draw_data = viewport->DrawData; } if(draw_data == nullptr) @@ -103,8 +99,8 @@ void ImGuiPass::render_post(GFXCommandBuffer* command_buffer, RenderTarget& targ } const Matrix4x4 projection = prism::orthographic(draw_data->DisplayPos.x, - draw_data->DisplayPos.x + draw_data->DisplaySize.x, - draw_data->DisplayPos.y + draw_data->DisplaySize.y, + draw_data->DisplayPos.x + draw_data->DisplaySize.x, + draw_data->DisplayPos.y + draw_data->DisplaySize.y, draw_data->DisplayPos.y, 0.0f, 1.0f); @@ -158,8 +154,8 @@ void ImGuiPass::load_font(const std::string_view filename) { font_file->read_all(); - io.Fonts->AddFontFromMemoryTTF(font_file->cast_data(), font_file->size(), 15.0 * platform::get_window_dpi(engine->get_main_window())); - ImGui::GetIO().FontGlobalScale = 1.0 / platform::get_window_dpi(engine->get_main_window()); + io.Fonts->AddFontFromMemoryTTF(font_file->cast_data(), font_file->size(), 15.0f * platform::get_window_dpi(engine->get_main_window())); + ImGui::GetIO().FontGlobalScale = 1.0f / platform::get_window_dpi(engine->get_main_window()); } else { prism::log("Failed to load font file for imgui!"); return;