diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index 997bec451da..a685aa10658 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -3865,8 +3865,12 @@ void TextServerAdvanced::_font_draw_glyph(const RID &p_font_rid, const RID &p_ca } } bool skip_oversampling = fd->msdf || fd->fixed_size > 0; - uint64_t oversampling_level = CLAMP(oversampling_factor, 0.1, 100.0) * 64; - oversampling_factor = double(oversampling_level) / 64.0; + if (skip_oversampling) { + oversampling_factor = 1.0; + } else { + uint64_t oversampling_level = CLAMP(oversampling_factor, 0.1, 100.0) * 64; + oversampling_factor = double(oversampling_level) / 64.0; + } Vector2i size; if (skip_oversampling) { @@ -3943,8 +3947,8 @@ void TextServerAdvanced::_font_draw_glyph(const RID &p_font_rid, const RID &p_ca Size2 csize = fgl.rect.size * (double)p_size / (double)fd->msdf_source_size; RenderingServer::get_singleton()->canvas_item_add_msdf_texture_rect_region(p_canvas, Rect2(cpos, csize), texture, fgl.uv_rect, modulate, 0, fd->msdf_range, (double)p_size / (double)fd->msdf_source_size); } else { - double scale = _font_get_scale(p_font_rid, p_size) / oversampling_factor; Point2 cpos = p_pos; + double scale = _font_get_scale(p_font_rid, p_size) / oversampling_factor; if ((fd->subpixel_positioning == SUBPIXEL_POSITIONING_ONE_QUARTER) || (fd->subpixel_positioning == SUBPIXEL_POSITIONING_AUTO && size.x <= SUBPIXEL_POSITIONING_ONE_QUARTER_MAX_SIZE * 64)) { cpos.x = cpos.x + 0.125; } else if ((fd->subpixel_positioning == SUBPIXEL_POSITIONING_ONE_HALF) || (fd->subpixel_positioning == SUBPIXEL_POSITIONING_AUTO && size.x <= SUBPIXEL_POSITIONING_ONE_HALF_MAX_SIZE * 64)) { @@ -4005,14 +4009,18 @@ void TextServerAdvanced::_font_draw_glyph_outline(const RID &p_font_rid, const R } } bool skip_oversampling = fd->msdf || fd->fixed_size > 0; - uint64_t oversampling_level = CLAMP(oversampling_factor, 0.1, 100.0) * 64; - oversampling_factor = double(oversampling_level) / 64.0; + if (skip_oversampling) { + oversampling_factor = 1.0; + } else { + uint64_t oversampling_level = CLAMP(oversampling_factor, 0.1, 100.0) * 64; + oversampling_factor = double(oversampling_level) / 64.0; + } Vector2i size; if (skip_oversampling) { size = _get_size_outline(fd, Vector2i(p_size, p_outline_size)); } else { - size = Vector2i(p_size * 64 * oversampling_factor, p_outline_size); + size = Vector2i(p_size * 64 * oversampling_factor, p_outline_size * oversampling_factor); } FontForSizeAdvanced *ffsd = nullptr; diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index ef4f3e4f778..e53c1c67e15 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -2805,8 +2805,12 @@ void TextServerFallback::_font_draw_glyph(const RID &p_font_rid, const RID &p_ca } } bool skip_oversampling = fd->msdf || fd->fixed_size > 0; - uint64_t oversampling_level = CLAMP(oversampling_factor, 0.1, 100.0) * 64; - oversampling_factor = double(oversampling_level) / 64.0; + if (skip_oversampling) { + oversampling_factor = 1.0; + } else { + uint64_t oversampling_level = CLAMP(oversampling_factor, 0.1, 100.0) * 64; + oversampling_factor = double(oversampling_level) / 64.0; + } Vector2i size; if (skip_oversampling) { @@ -2945,14 +2949,18 @@ void TextServerFallback::_font_draw_glyph_outline(const RID &p_font_rid, const R } } bool skip_oversampling = fd->msdf || fd->fixed_size > 0; - uint64_t oversampling_level = CLAMP(oversampling_factor, 0.1, 100.0) * 64; - oversampling_factor = double(oversampling_level) / 64.0; + if (skip_oversampling) { + oversampling_factor = 1.0; + } else { + uint64_t oversampling_level = CLAMP(oversampling_factor, 0.1, 100.0) * 64; + oversampling_factor = double(oversampling_level) / 64.0; + } Vector2i size; if (skip_oversampling) { size = _get_size_outline(fd, Vector2i(p_size, p_outline_size)); } else { - size = Vector2i(p_size * 64 * oversampling_factor, p_outline_size); + size = Vector2i(p_size * 64 * oversampling_factor, p_outline_size * oversampling_factor); } FontForSizeFallback *ffsd = nullptr;