Clean up a bunch of pass/backend code for imgui
This commit is contained in:
parent
5a046ee27a
commit
8205f65a8e
2 changed files with 24 additions and 32 deletions
|
@ -98,23 +98,20 @@ imgui_backend::imgui_backend() {
|
||||||
|
|
||||||
ImGuiPlatformMonitor monitor = {};
|
ImGuiPlatformMonitor monitor = {};
|
||||||
|
|
||||||
const auto rect = platform::get_monitor_resolution();
|
const auto monitorArea = platform::get_monitor_resolution();
|
||||||
monitor.MainPos = rect.offset;
|
monitor.MainPos = monitorArea.offset;
|
||||||
monitor.MainSize = rect.extent;
|
monitor.MainSize = monitorArea.extent;
|
||||||
|
|
||||||
const auto wrect = platform::get_monitor_work_area();
|
const auto workArea = platform::get_monitor_work_area();
|
||||||
monitor.WorkPos = wrect.offset;
|
monitor.WorkPos = workArea.offset;
|
||||||
monitor.WorkSize = wrect.extent;
|
monitor.WorkSize = workArea.extent;
|
||||||
|
|
||||||
monitor.DpiScale = platform::get_monitor_dpi();
|
monitor.DpiScale = platform::get_monitor_dpi();
|
||||||
|
|
||||||
platform_io.Monitors.push_back(monitor);
|
platform_io.Monitors.push_back(monitor);
|
||||||
|
|
||||||
platform_io.Platform_CreateWindow = [](ImGuiViewport* viewport) {
|
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) {
|
platform_io.Platform_DestroyWindow = [](ImGuiViewport* viewport) {
|
||||||
|
@ -127,18 +124,16 @@ imgui_backend::imgui_backend() {
|
||||||
platform::set_window_position(viewport->PlatformHandle, pos);
|
platform::set_window_position(viewport->PlatformHandle, pos);
|
||||||
};
|
};
|
||||||
|
|
||||||
platform_io.Platform_GetWindowPos = [](ImGuiViewport* viewport) {
|
platform_io.Platform_GetWindowPos = [](ImGuiViewport* viewport) -> ImVec2 {
|
||||||
auto [x, y] = platform::get_window_position(viewport->PlatformHandle);
|
return platform::get_window_position(viewport->PlatformHandle);
|
||||||
return ImVec2(x, y);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
platform_io.Platform_SetWindowSize = [](ImGuiViewport* viewport, const ImVec2 size) {
|
platform_io.Platform_SetWindowSize = [](ImGuiViewport* viewport, const ImVec2 size) {
|
||||||
platform::set_window_size(viewport->PlatformHandle, size);
|
platform::set_window_size(viewport->PlatformHandle, size);
|
||||||
};
|
};
|
||||||
|
|
||||||
platform_io.Platform_GetWindowSize = [](ImGuiViewport* viewport) {
|
platform_io.Platform_GetWindowSize = [](ImGuiViewport* viewport) -> ImVec2 {
|
||||||
auto [x, y] = platform::get_window_size(viewport->PlatformHandle);
|
return platform::get_window_size(viewport->PlatformHandle);
|
||||||
return ImVec2(x, y);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
platform_io.Platform_SetWindowFocus = [](ImGuiViewport* viewport) {
|
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 size = platform::get_window_size(::engine->get_main_window());
|
||||||
const auto [dw, dh] = platform::get_window_drawable_size(::engine->get_main_window());
|
const auto drawableSize = platform::get_window_drawable_size(::engine->get_main_window());
|
||||||
|
|
||||||
io.DisplaySize = ImVec2(width, height);
|
io.DisplaySize = size;
|
||||||
io.DisplayFramebufferScale = ImVec2((float)dw / width, (float)dh / height);
|
io.DisplayFramebufferScale = ImVec2(static_cast<float>(drawableSize.width) / static_cast<float>(size.width),
|
||||||
|
static_cast<float>(drawableSize.height) / static_cast<float>(size.height));
|
||||||
io.DeltaTime = delta_time;
|
io.DeltaTime = delta_time;
|
||||||
io.KeyCtrl = platform::get_key_down(InputButton::Ctrl);
|
io.KeyCtrl = platform::get_key_down(InputButton::Ctrl);
|
||||||
io.KeyShift = platform::get_key_down(InputButton::Shift);
|
io.KeyShift = platform::get_key_down(InputButton::Shift);
|
||||||
|
|
|
@ -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) {
|
void ImGuiPass::render_post(GFXCommandBuffer* command_buffer, RenderTarget& target, const platform::window_ptr index) {
|
||||||
ImDrawData* draw_data = nullptr;
|
ImDrawData* draw_data = nullptr;
|
||||||
if(platform::is_main_window(index)) {
|
if(!(ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_ViewportsEnable)) {
|
||||||
draw_data = ImGui::GetDrawData();
|
draw_data = ImGui::GetDrawData();
|
||||||
} else {
|
} else {
|
||||||
auto& io = ImGui::GetPlatformIO();
|
auto viewport = ImGui::FindViewportByPlatformHandle(index);
|
||||||
for(int i = 1; i < io.Viewports.size(); i++) {
|
if(viewport != nullptr)
|
||||||
if((io.Viewports[i]->Flags & ImGuiViewportFlags_Minimized) == 0) {
|
draw_data = viewport->DrawData;
|
||||||
if(io.Viewports[i]->PlatformHandle == index)
|
|
||||||
draw_data = io.Viewports[i]->DrawData;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(draw_data == nullptr)
|
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,
|
const Matrix4x4 projection = prism::orthographic(draw_data->DisplayPos.x,
|
||||||
draw_data->DisplayPos.x + draw_data->DisplaySize.x,
|
draw_data->DisplayPos.x + draw_data->DisplaySize.x,
|
||||||
draw_data->DisplayPos.y + draw_data->DisplaySize.y,
|
draw_data->DisplayPos.y + draw_data->DisplaySize.y,
|
||||||
draw_data->DisplayPos.y,
|
draw_data->DisplayPos.y,
|
||||||
0.0f,
|
0.0f,
|
||||||
1.0f);
|
1.0f);
|
||||||
|
@ -158,8 +154,8 @@ void ImGuiPass::load_font(const std::string_view filename) {
|
||||||
|
|
||||||
font_file->read_all();
|
font_file->read_all();
|
||||||
|
|
||||||
io.Fonts->AddFontFromMemoryTTF(font_file->cast_data<unsigned char>(), font_file->size(), 15.0 * platform::get_window_dpi(engine->get_main_window()));
|
io.Fonts->AddFontFromMemoryTTF(font_file->cast_data<unsigned char>(), font_file->size(), 15.0f * platform::get_window_dpi(engine->get_main_window()));
|
||||||
ImGui::GetIO().FontGlobalScale = 1.0 / platform::get_window_dpi(engine->get_main_window());
|
ImGui::GetIO().FontGlobalScale = 1.0f / platform::get_window_dpi(engine->get_main_window());
|
||||||
} else {
|
} else {
|
||||||
prism::log("Failed to load font file for imgui!");
|
prism::log("Failed to load font file for imgui!");
|
||||||
return;
|
return;
|
||||||
|
|
Reference in a new issue