diff --git a/src/overlay.cpp b/src/overlay.cpp index 20b9bf08..385793c5 100644 --- a/src/overlay.cpp +++ b/src/overlay.cpp @@ -1104,6 +1104,21 @@ static void position_layer(struct swapchain_data *data) } } +static void right_aligned_text(float off_x, const char *fmt, ...) +{ + ImVec2 pos = ImGui::GetCursorPos(); + char buffer[32] {}; + + va_list args; + va_start(args, fmt); + vsnprintf(buffer, sizeof(buffer), fmt, args); + va_end(args); + + ImVec2 sz = ImGui::CalcTextSize(buffer); + ImGui::SetCursorPosX(pos.x + off_x - sz.x); + ImGui::Text("%s", buffer); +} + static void compute_swapchain_display(struct swapchain_data *data) { struct device_data *device_data = data->device; @@ -1113,6 +1128,8 @@ static void compute_swapchain_display(struct swapchain_data *data) ImGui::NewFrame(); position_layer(data); + static float char_width = ImGui::CalcTextSize("A").x; + if (!instance_data->params.no_display){ ImGui::Begin("Main", &open, ImGuiWindowFlags_NoDecoration); ImGui::BeginTable("hud", instance_data->params.tableCols); @@ -1124,16 +1141,20 @@ static void compute_swapchain_display(struct swapchain_data *data) ImGui::TableNextRow(); ImGui::TextColored(ImVec4(0.180, 0.592, 0.384, 1.00f), "GPU"); ImGui::TableNextCell(); - ImGui::Text("%i%%", gpuLoad); + right_aligned_text(char_width * 4, "%i", gpuLoad); + ImGui::SameLine(0, 1.0f); + ImGui::Text("%%"); // ImGui::SameLine(150); // ImGui::Text("%s", "%"); if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_gpu_temp]){ ImGui::TableNextCell(); - ImGui::Text("%i%s", gpuTemp, "°C"); + right_aligned_text(char_width * 4, "%i", gpuTemp); + ImGui::SameLine(0, 1.0f); + ImGui::Text("°C"); } if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_gpu_core_clock]){ ImGui::TableNextCell(); - ImGui::Text("%i", gpuCoreClock); + right_aligned_text(char_width * 4, "%i", gpuCoreClock); ImGui::SameLine(0, 1.0f); ImGui::PushFont(data->font1); ImGui::Text("MHz"); @@ -1144,13 +1165,17 @@ static void compute_swapchain_display(struct swapchain_data *data) ImGui::TableNextRow(); ImGui::TextColored(ImVec4(0.180, 0.592, 0.796, 1.00f), "CPU"); ImGui::TableNextCell(); - ImGui::Text("%d%%", cpuLoadLog); + right_aligned_text(char_width * 4, "%d", cpuLoadLog); + ImGui::SameLine(0, 1.0f); + ImGui::Text("%%"); // ImGui::SameLine(150); // ImGui::Text("%s", "%"); if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_cpu_temp]){ ImGui::TableNextCell(); - ImGui::Text("%i%s", cpuTemp, "°C"); + right_aligned_text(char_width * 4, "%i", cpuTemp); + ImGui::SameLine(0, 1.0f); + ImGui::Text("°C"); } } @@ -1165,9 +1190,11 @@ static void compute_swapchain_display(struct swapchain_data *data) ImGui::TextColored(ImVec4(0.180, 0.592, 0.796, 1.00f),"%i", i); ImGui::PopFont(); ImGui::TableNextCell(); - ImGui::Text("%i%%", int(cpuData.percent)); + right_aligned_text(char_width * 4, "%i", int(cpuData.percent)); + ImGui::SameLine(0, 1.0f); + ImGui::Text("%%"); ImGui::TableNextCell(); - ImGui::Text("%i", cpuData.mhz); + right_aligned_text(char_width * 4, "%i", cpuData.mhz); ImGui::SameLine(0, 1.0f); ImGui::PushFont(data->font1); ImGui::Text("MHz"); @@ -1187,7 +1214,8 @@ static void compute_swapchain_display(struct swapchain_data *data) if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_io_read]){ ImGui::TableNextCell(); - ImGui::Text("%.2f", data->io.diff.read * (1000000 / sampling)); + float val = data->io.diff.read * (1000000 / sampling); + right_aligned_text(char_width * 4, val < 100 ? "%.2f" : "%.f", val); ImGui::SameLine(0,1.0f); ImGui::PushFont(data->font1); ImGui::Text("MiB/s"); @@ -1195,7 +1223,8 @@ static void compute_swapchain_display(struct swapchain_data *data) } if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_io_write]){ ImGui::TableNextCell(); - ImGui::Text("%.2f", data->io.diff.write * (1000000 / sampling)); + float val = data->io.diff.write * (1000000 / sampling); + right_aligned_text(char_width * 4, val < 100 ? "%.2f" : "%.f", val); ImGui::SameLine(0,1.0f); ImGui::PushFont(data->font1); ImGui::Text("MiB/s"); @@ -1206,14 +1235,14 @@ static void compute_swapchain_display(struct swapchain_data *data) ImGui::TableNextRow(); ImGui::TextColored(ImVec4(0.678, 0.392, 0.756, 1.00f), "VRAM"); ImGui::TableNextCell(); - ImGui::Text("%.2f", gpuMemUsed); + right_aligned_text(char_width * 4, "%.2f", gpuMemUsed); ImGui::SameLine(0,1.0f); ImGui::PushFont(data->font1); ImGui::Text("GB"); ImGui::PopFont(); if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_gpu_mem_clock]){ ImGui::TableNextCell(); - ImGui::Text("%i", gpuMemClock); + right_aligned_text(char_width * 4, "%i", gpuMemClock); ImGui::SameLine(0, 1.0f); ImGui::PushFont(data->font1); ImGui::Text("MHz"); @@ -1224,43 +1253,23 @@ static void compute_swapchain_display(struct swapchain_data *data) ImGui::TableNextRow(); ImGui::TextColored(ImVec4(0.760, 0.4, 0.576, 1.00f), "RAM"); ImGui::TableNextCell(); - ImGui::Text("%.2f", memused); + right_aligned_text(char_width * 4, "%.2f", memused); ImGui::SameLine(0,1.0f); ImGui::PushFont(data->font1); ImGui::Text("GB"); ImGui::PopFont(); } - if (instance_data->params.io_read){ - auto sampling = instance_data->params.fps_sampling_period; - ImGui::TextColored(ImVec4(0.760, 0.576, 0.4, 1.00f), "IO rd"); - ImGui::SameLine(hudFirstRow); - ImGui::Text("%.2f", data->io.diff.read * (1000000 / sampling)); - ImGui::SameLine(0,1.0f); - ImGui::PushFont(data->font1); - ImGui::Text("MiB/s"); - ImGui::PopFont(); - } - if (instance_data->params.io_write){ - auto sampling = instance_data->params.fps_sampling_period; - ImGui::TextColored(ImVec4(0.760, 0.576, 0.4, 1.00f), "IO wr"); - ImGui::SameLine(hudFirstRow); - ImGui::Text("%.2f", data->io.diff.write * (1000000 / sampling)); - ImGui::SameLine(0,1.0f); - ImGui::PushFont(data->font1); - ImGui::Text("MiB/s"); - ImGui::PopFont(); - } if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_fps]){ ImGui::TableNextRow(); ImGui::TextColored(ImVec4(0.925, 0.411, 0.411, 1.00f), "%s", engineName.c_str()); ImGui::TableNextCell(); - ImGui::Text("%.0f", data->fps); + right_aligned_text(char_width * 4, "%.0f", data->fps); ImGui::SameLine(0, 1.0f); ImGui::PushFont(data->font1); ImGui::Text("FPS"); ImGui::PopFont(); ImGui::TableNextCell(); - ImGui::Text("%.1f", 1000 / data->fps); + right_aligned_text(char_width * 4, "%.1f", 1000 / data->fps); ImGui::SameLine(0, 1.0f); ImGui::PushFont(data->font1); ImGui::Text("ms");