Create ImGui fonts per swapchain

pull/43/head
jackun 4 years ago
parent 099082affc
commit 2fb0453e28
No known key found for this signature in database
GPG Key ID: 119DB3F1D05A9ED3

@ -60,8 +60,6 @@ string gpuString;
float offset_x, offset_y, hudSpacing; float offset_x, offset_y, hudSpacing;
int hudFirstRow, hudSecondRow; int hudFirstRow, hudSecondRow;
string engineName, engineVersion; string engineName, engineVersion;
ImFont* font = nullptr;
ImFont* font1 = nullptr;
struct amdGpu amdgpu; struct amdGpu amdgpu;
int64_t frameStart, frameEnd, targetFrameTime = 0, frameOverhead = 0, sleepTime = 0; int64_t frameStart, frameEnd, targetFrameTime = 0, frameOverhead = 0, sleepTime = 0;
@ -191,6 +189,8 @@ struct swapchain_data {
struct list_head draws; /* List of struct overlay_draw */ struct list_head draws; /* List of struct overlay_draw */
ImFont* font = nullptr;
ImFont* font1 = nullptr;
bool font_uploaded; bool font_uploaded;
VkImage font_image; VkImage font_image;
VkImageView font_image_view; VkImageView font_image_view;
@ -1142,7 +1142,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
std::time_t t = std::time(nullptr); std::time_t t = std::time(nullptr);
std::stringstream time; std::stringstream time;
time << std::put_time(std::localtime(&t), "%T"); time << std::put_time(std::localtime(&t), "%T");
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::TextColored(ImVec4(1.0f, 1.0f, 1.0f, 1.00f), "%s", time.str().c_str()); ImGui::TextColored(ImVec4(1.0f, 1.0f, 1.0f, 1.00f), "%s", time.str().c_str());
ImGui::PopFont(); ImGui::PopFont();
} }
@ -1176,7 +1176,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
{ {
ImGui::TextColored(ImVec4(0.180, 0.592, 0.796, 1.00f), "CPU"); ImGui::TextColored(ImVec4(0.180, 0.592, 0.796, 1.00f), "CPU");
ImGui::SameLine(0, 1.0f); ImGui::SameLine(0, 1.0f);
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::TextColored(ImVec4(0.180, 0.592, 0.796, 1.00f),"%i", i); ImGui::TextColored(ImVec4(0.180, 0.592, 0.796, 1.00f),"%i", i);
ImGui::PopFont(); ImGui::PopFont();
ImGui::SameLine(hudFirstRow); ImGui::SameLine(hudFirstRow);
@ -1184,7 +1184,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
ImGui::SameLine(hudSecondRow); ImGui::SameLine(hudSecondRow);
ImGui::Text("%i", cpuData.mhz); ImGui::Text("%i", cpuData.mhz);
ImGui::SameLine(0, 1.0f); ImGui::SameLine(0, 1.0f);
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::Text("MHz"); ImGui::Text("MHz");
ImGui::PopFont(); ImGui::PopFont();
i++; i++;
@ -1195,7 +1195,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
ImGui::SameLine(hudFirstRow); ImGui::SameLine(hudFirstRow);
ImGui::Text("%.2f", gpuMemUsed); ImGui::Text("%.2f", gpuMemUsed);
ImGui::SameLine(0,1.0f); ImGui::SameLine(0,1.0f);
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::Text("GB"); ImGui::Text("GB");
ImGui::PopFont(); ImGui::PopFont();
} }
@ -1204,7 +1204,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
ImGui::SameLine(hudFirstRow); ImGui::SameLine(hudFirstRow);
ImGui::Text("%.2f", memused); ImGui::Text("%.2f", memused);
ImGui::SameLine(0,1.0f); ImGui::SameLine(0,1.0f);
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::Text("GB"); ImGui::Text("GB");
ImGui::PopFont(); ImGui::PopFont();
} }
@ -1213,17 +1213,17 @@ static void compute_swapchain_display(struct swapchain_data *data)
ImGui::SameLine(hudFirstRow); ImGui::SameLine(hudFirstRow);
ImGui::Text("%.0f", data->fps); ImGui::Text("%.0f", data->fps);
ImGui::SameLine(0, 1.0f); ImGui::SameLine(0, 1.0f);
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::Text("FPS"); ImGui::Text("FPS");
ImGui::PopFont(); ImGui::PopFont();
ImGui::SameLine(hudSecondRow); ImGui::SameLine(hudSecondRow);
ImGui::Text("%.1f", 1000 / data->fps); ImGui::Text("%.1f", 1000 / data->fps);
ImGui::SameLine(0, 1.0f); ImGui::SameLine(0, 1.0f);
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::Text("ms"); ImGui::Text("ms");
ImGui::PopFont(); ImGui::PopFont();
if (engineName == "DXVK" || engineName == "VKD3D"){ if (engineName == "DXVK" || engineName == "VKD3D"){
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::TextColored(ImVec4(0.925, 0.411, 0.411, 1.00f), "%s", engineVersion.c_str()); ImGui::TextColored(ImVec4(0.925, 0.411, 0.411, 1.00f), "%s", engineVersion.c_str());
ImGui::PopFont(); ImGui::PopFont();
} }
@ -1240,7 +1240,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_frame_timing]){ if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_frame_timing]){
ImGui::Dummy(ImVec2(0.0f, instance_data->params.font_size / 2)); ImGui::Dummy(ImVec2(0.0f, instance_data->params.font_size / 2));
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::TextColored(ImVec4(0.925, 0.411, 0.411, 1.00f), "%s", "Frametime"); ImGui::TextColored(ImVec4(0.925, 0.411, 0.411, 1.00f), "%s", "Frametime");
ImGui::PopFont(); ImGui::PopFont();
} }
@ -1271,7 +1271,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
} }
if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_frame_timing]){ if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_frame_timing]){
ImGui::SameLine(0,1.0f); ImGui::SameLine(0,1.0f);
ImGui::PushFont(font1); ImGui::PushFont(data->font1);
ImGui::Text("%.1f ms", 1000 / data->fps); ImGui::Text("%.1f ms", 1000 / data->fps);
ImGui::PopFont(); ImGui::PopFont();
} }
@ -1882,16 +1882,17 @@ static void setup_swapchain_data_pipeline(struct swapchain_data *data)
font_size = 24; font_size = 24;
const char* mangohud_font = getenv("MANGOHUD_FONT"); const char* mangohud_font = getenv("MANGOHUD_FONT");
if(mangohud_font) { // ImGui takes ownership of the data, no need to free it
font = io.Fonts->AddFontFromFileTTF(mangohud_font, font_size); if (mangohud_font && file_exists(mangohud_font)) {
font1 = io.Fonts->AddFontFromFileTTF(mangohud_font, font_size * 0.55f); data->font = io.Fonts->AddFontFromFileTTF(mangohud_font, font_size);
data->font1 = io.Fonts->AddFontFromFileTTF(mangohud_font, font_size * 0.55f);
} else { } else {
ImFontConfig font_cfg = ImFontConfig(); ImFontConfig font_cfg = ImFontConfig();
const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85(); const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85();
const ImWchar* glyph_ranges = io.Fonts->GetGlyphRangesDefault(); const ImWchar* glyph_ranges = io.Fonts->GetGlyphRangesDefault();
font = io.Fonts->AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_size, &font_cfg, glyph_ranges); data->font = io.Fonts->AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_size, &font_cfg, glyph_ranges);
font1 = io.Fonts->AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_size * 0.55, &font_cfg, glyph_ranges); data->font1 = io.Fonts->AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_size * 0.55, &font_cfg, glyph_ranges);
} }
unsigned char* pixels; unsigned char* pixels;
int width, height; int width, height;

Loading…
Cancel
Save