From d2737ad7dd8f4ea94a74034027014fd3d78923cb Mon Sep 17 00:00:00 2001 From: jvanverth Date: Mon, 9 Mar 2015 09:45:40 -0700 Subject: [PATCH] Adjust distance field glyph and font atlas sizes to maximize storage. Because of high DPI devices, we need more room in the glyph atlas for the larger glyphs. These settings will allow 4 of the distance field glyphs to fit in one Plot (increasing the storage from 32 large glyphs to 128), and still permit us to handle glyphs up to a 312 point size. BUG=chromium:458791 Review URL: https://codereview.chromium.org/986343002 --- src/gpu/GrDistanceFieldTextContext.cpp | 8 +++++--- src/gpu/GrFontAtlasSizes.h | 25 ++++++++++++++++--------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/gpu/GrDistanceFieldTextContext.cpp b/src/gpu/GrDistanceFieldTextContext.cpp index 47d408f7f8..877f112abc 100755 --- a/src/gpu/GrDistanceFieldTextContext.cpp +++ b/src/gpu/GrDistanceFieldTextContext.cpp @@ -10,6 +10,7 @@ #include "GrBitmapTextContext.h" #include "GrDrawTarget.h" #include "GrDrawTargetCaps.h" +#include "GrFontAtlasSizes.h" #include "GrFontCache.h" #include "GrFontScaler.h" #include "GrGpu.h" @@ -33,9 +34,10 @@ SK_CONF_DECLARE(bool, c_DumpFontCache, "gpu.dumpFontCache", false, static const int kSmallDFFontSize = 32; static const int kSmallDFFontLimit = 32; -static const int kMediumDFFontSize = 78; -static const int kMediumDFFontLimit = 78; -static const int kLargeDFFontSize = 192; +static const int kMediumDFFontSize = 70; +static const int kMediumDFFontLimit = 70; +static const int kLargeDFFontSize = 156; +SK_COMPILE_ASSERT(GR_SDF_MAX_SIZE >= kLargeDFFontSize, sdf_too_big); static const int kVerticesPerGlyph = 4; static const int kIndicesPerGlyph = 6; diff --git a/src/gpu/GrFontAtlasSizes.h b/src/gpu/GrFontAtlasSizes.h index 24897e4a7a..626aefa7aa 100644 --- a/src/gpu/GrFontAtlasSizes.h +++ b/src/gpu/GrFontAtlasSizes.h @@ -9,20 +9,27 @@ #ifndef GrFontAtlasSizes_DEFINED #define GrFontAtlasSizes_DEFINED -#define GR_FONT_ATLAS_TEXTURE_WIDTH 1024 -#define GR_FONT_ATLAS_TEXTURE_HEIGHT 2048 +#include "SkDistanceFieldGen.h" -#define GR_FONT_ATLAS_PLOT_WIDTH 256 -#define GR_FONT_ATLAS_PLOT_HEIGHT 256 +#define GR_SDF_MAX_SIZE 156 -#define GR_FONT_ATLAS_NUM_PLOTS_X (GR_FONT_ATLAS_TEXTURE_WIDTH / GR_FONT_ATLAS_PLOT_WIDTH) -#define GR_FONT_ATLAS_NUM_PLOTS_Y (GR_FONT_ATLAS_TEXTURE_HEIGHT / GR_FONT_ATLAS_PLOT_HEIGHT) +// allows us to fit four of the largest distance field glyphs +#define GR_FONT_ATLAS_PLOT_WIDTH (2*(GR_SDF_MAX_SIZE+2*SK_DistanceFieldPad)) +#define GR_FONT_ATLAS_PLOT_HEIGHT (2*(GR_SDF_MAX_SIZE+2*SK_DistanceFieldPad)) + +#define GR_FONT_ATLAS_NUM_PLOTS_X 4 +#define GR_FONT_ATLAS_NUM_PLOTS_Y 8 + +#define GR_FONT_ATLAS_TEXTURE_WIDTH (GR_FONT_ATLAS_PLOT_WIDTH*GR_FONT_ATLAS_NUM_PLOTS_X) +SK_COMPILE_ASSERT(GR_FONT_ATLAS_TEXTURE_WIDTH == 1312, font_atlas_unexpected_size); +#define GR_FONT_ATLAS_TEXTURE_HEIGHT (GR_FONT_ATLAS_PLOT_HEIGHT*GR_FONT_ATLAS_NUM_PLOTS_Y) +SK_COMPILE_ASSERT(GR_FONT_ATLAS_TEXTURE_HEIGHT == 2624, font_atlas_unexpected_size); // one over width and height -#define GR_FONT_ATLAS_RECIP_WIDTH "0.0009765625" -#define GR_FONT_ATLAS_RECIP_HEIGHT "0.00048828125" +#define GR_FONT_ATLAS_RECIP_WIDTH "0.00076219512" +#define GR_FONT_ATLAS_RECIP_HEIGHT "0.00038109756" // 1/(3*width) -#define GR_FONT_ATLAS_LCD_DELTA "0.00032552083" +#define GR_FONT_ATLAS_LCD_DELTA "0.00025406504" #endif