aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrDistanceFieldGeoProc.h
diff options
context:
space:
mode:
authorGravatar jvanverth <jvanverth@google.com>2016-03-10 11:10:43 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-10 11:10:43 -0800
commitcf371bb41b4a0591347a076ce7d83336d4bbc6fb (patch)
treecd0e34686433786ab2a759ddf619f86faa718931 /src/gpu/effects/GrDistanceFieldGeoProc.h
parent4ba051cbcfbd379714250b1fe463c1610e7df04c (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.h9
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,
};