diff options
author | jvanverth <jvanverth@google.com> | 2016-03-10 11:10:43 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-10 11:10:43 -0800 |
commit | cf371bb41b4a0591347a076ce7d83336d4bbc6fb (patch) | |
tree | cd0e34686433786ab2a759ddf619f86faa718931 /src/gpu/effects/GrDistanceFieldGeoProc.h | |
parent | 4ba051cbcfbd379714250b1fe463c1610e7df04c (diff) |
Use correct gradient calculation for rotated distance fields.
For all uniform scaled matrices, we were using the y coordinate of the
y-direction gradient of the v texel space coordinate to scale the
distance values. The problem is, if you rotate by 90 degrees this value
becomes 0. The correct answer is to take the length of the y-direction
gradient.
BUG=skia:4864
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1776383002
Review URL: https://codereview.chromium.org/1776383002
Diffstat (limited to 'src/gpu/effects/GrDistanceFieldGeoProc.h')
-rw-r--r-- | src/gpu/effects/GrDistanceFieldGeoProc.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.h b/src/gpu/effects/GrDistanceFieldGeoProc.h index 46d39f0123..765a531c94 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.h +++ b/src/gpu/effects/GrDistanceFieldGeoProc.h @@ -18,7 +18,7 @@ class GrInvariantOutput; enum GrDistanceFieldEffectFlags { kSimilarity_DistanceFieldEffectFlag = 0x01, // ctm is similarity matrix - kRectToRect_DistanceFieldEffectFlag = 0x02, // ctm maps rects to rects + kScaleOnly_DistanceFieldEffectFlag = 0x02, // ctm has only scale and translate kUseLCD_DistanceFieldEffectFlag = 0x04, // use lcd text kBGR_DistanceFieldEffectFlag = 0x08, // lcd display has bgr order kPortrait_DistanceFieldEffectFlag = 0x10, // lcd display is in portrait mode (not used yet) @@ -26,12 +26,13 @@ enum GrDistanceFieldEffectFlags { kInvalid_DistanceFieldEffectFlag = 0x80, // invalid state (for initialization) kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | - kRectToRect_DistanceFieldEffectFlag, + kScaleOnly_DistanceFieldEffectFlag, // The subset of the flags relevant to GrDistanceFieldA8TextGeoProc - kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag, + kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | + kScaleOnly_DistanceFieldEffectFlag, // The subset of the flags relevant to GrDistanceFieldLCDTextGeoProc kLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | - kRectToRect_DistanceFieldEffectFlag | + kScaleOnly_DistanceFieldEffectFlag | kUseLCD_DistanceFieldEffectFlag | kBGR_DistanceFieldEffectFlag, }; |