diff --git a/3rdparty/ocornut-imgui/imgui.cpp b/3rdparty/ocornut-imgui/imgui.cpp index 5127294cc..19a2df181 100644 --- a/3rdparty/ocornut-imgui/imgui.cpp +++ b/3rdparty/ocornut-imgui/imgui.cpp @@ -658,6 +658,7 @@ ImGuiIO::ImGuiIO() DisplaySize = ImVec2(-1.0f, -1.0f); DeltaTime = 1.0f/60.0f; IniSavingRate = 5.0f; + PixelCenterOffset = 0.5f; IniFilename = "imgui.ini"; LogFilename = "imgui_log.txt"; Fonts = &GDefaultFontAtlas; @@ -9180,6 +9181,9 @@ bool ImFontAtlas::Build() ImGui::MemFree(buf_rects); buf_rects = NULL; + ImGuiIO& io = ImGui::GetIO(); + const float PixelCenterOffset = io.PixelCenterOffset; + // Third pass: setup ImFont and glyphs for runtime for (size_t input_i = 0; input_i < InputData.size(); input_i++) { @@ -9213,10 +9217,10 @@ bool ImFontAtlas::Build() glyph.XOffset = (signed short)(pc.xoff); glyph.YOffset = (signed short)(pc.yoff + (int)(font_ascent * font_scale)); glyph.XAdvance = (signed short)(pc.xadvance + character_spacing_x); // Bake spacing into XAdvance - glyph.U0 = ((float)pc.x0 - 0.5f) * uv_scale_x; - glyph.V0 = ((float)pc.y0 - 0.5f) * uv_scale_y; - glyph.U1 = ((float)pc.x0 - 0.5f + glyph.Width) * uv_scale_x; - glyph.V1 = ((float)pc.y0 - 0.5f + glyph.Height) * uv_scale_y; + glyph.U0 = ((float)pc.x0 - PixelCenterOffset) * uv_scale_x; + glyph.V0 = ((float)pc.y0 - PixelCenterOffset) * uv_scale_y; + glyph.U1 = ((float)pc.x0 - PixelCenterOffset + glyph.Width) * uv_scale_x; + glyph.V1 = ((float)pc.y0 - PixelCenterOffset + glyph.Height) * uv_scale_y; } } diff --git a/3rdparty/ocornut-imgui/imgui.h b/3rdparty/ocornut-imgui/imgui.h index 9df8cf1ba..a4294a647 100644 --- a/3rdparty/ocornut-imgui/imgui.h +++ b/3rdparty/ocornut-imgui/imgui.h @@ -609,6 +609,7 @@ struct ImGuiIO ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + float PixelCenterOffset; // = 0.5f; // Pixel center offset for font texture. const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. diff --git a/examples/common/imgui/ocornut_imgui.cpp b/examples/common/imgui/ocornut_imgui.cpp index aab123704..eb8688428 100644 --- a/examples/common/imgui/ocornut_imgui.cpp +++ b/examples/common/imgui/ocornut_imgui.cpp @@ -108,7 +108,7 @@ struct OcornutImguiContext io.DisplaySize = ImVec2(1280.0f, 720.0f); io.DeltaTime = 1.0f / 60.0f; io.IniFilename = NULL; -// io.PixelCenterOffset = bgfx::RendererType::Direct3D9 == bgfx::getRendererType() ? -0.5f : 0.0f; + io.PixelCenterOffset = bgfx::RendererType::Direct3D9 == bgfx::getRendererType() ? 0.0f : 0.5f; for (uint32_t ii = 0; ii < ImGuiKey_COUNT; ++ii) {