pull out calculation of SDF ops parameters
Change-Id: Ifc3909a93ae036fc8f851cf0a8ea9cc65b688b34
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/375064
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/text/GrTextBlob.cpp b/src/gpu/text/GrTextBlob.cpp
index 910bd3b..618d2dc 100644
--- a/src/gpu/text/GrTextBlob.cpp
+++ b/src/gpu/text/GrTextBlob.cpp
@@ -1210,6 +1210,34 @@
has_some_antialiasing(runFont));
}
+static std::tuple<GrAtlasTextOp::MaskType, uint32_t, bool> calculate_sdf_parameters(
+ const GrSurfaceDrawContext& rtc,
+ const SkMatrix& drawMatrix,
+ bool useLCDText,
+ bool isAntiAliased) {
+ const GrColorInfo& colorInfo = rtc.colorInfo();
+ const SkSurfaceProps& props = rtc.surfaceProps();
+ bool isBGR = SkPixelGeometryIsBGR(props.pixelGeometry());
+ bool isLCD = useLCDText && SkPixelGeometryIsH(props.pixelGeometry());
+ using MT = GrAtlasTextOp::MaskType;
+ MT maskType = !isAntiAliased ? MT::kAliasedDistanceField
+ : isLCD ? (isBGR ? MT::kLCDBGRDistanceField
+ : MT::kLCDDistanceField)
+ : MT::kGrayscaleDistanceField;
+
+ bool useGammaCorrectDistanceTable = colorInfo.isLinearlyBlended();
+ uint32_t DFGPFlags = drawMatrix.isSimilarity() ? kSimilarity_DistanceFieldEffectFlag : 0;
+ DFGPFlags |= drawMatrix.isScaleTranslate() ? kScaleOnly_DistanceFieldEffectFlag : 0;
+ DFGPFlags |= useGammaCorrectDistanceTable ? kGammaCorrect_DistanceFieldEffectFlag : 0;
+ DFGPFlags |= MT::kAliasedDistanceField == maskType ? kAliased_DistanceFieldEffectFlag : 0;
+
+ if (isLCD) {
+ DFGPFlags |= kUseLCD_DistanceFieldEffectFlag;
+ DFGPFlags |= MT::kLCDBGRDistanceField == maskType ? kBGR_DistanceFieldEffectFlag : 0;
+ }
+ return {maskType, DFGPFlags, useGammaCorrectDistanceTable};
+}
+
std::tuple<const GrClip*, GrOp::Owner >
SDFTSubRun::makeAtlasTextOp(const GrClip* clip,
const SkMatrixProvider& viewMatrix,
@@ -1225,26 +1253,8 @@
GrPaint grPaint;
SkPMColor4f drawingColor = calculate_colors(rtc, drawPaint, viewMatrix, fMaskFormat, &grPaint);
- const GrColorInfo& colorInfo = rtc->colorInfo();
- const SkSurfaceProps& props = rtc->surfaceProps();
- bool isBGR = SkPixelGeometryIsBGR(props.pixelGeometry());
- bool isLCD = fUseLCDText && SkPixelGeometryIsH(props.pixelGeometry());
- using MT = GrAtlasTextOp::MaskType;
- MT maskType = !fAntiAliased ? MT::kAliasedDistanceField
- : isLCD ? (isBGR ? MT::kLCDBGRDistanceField
- : MT::kLCDDistanceField)
- : MT::kGrayscaleDistanceField;
-
- bool useGammaCorrectDistanceTable = colorInfo.isLinearlyBlended();
- uint32_t DFGPFlags = drawMatrix.isSimilarity() ? kSimilarity_DistanceFieldEffectFlag : 0;
- DFGPFlags |= drawMatrix.isScaleTranslate() ? kScaleOnly_DistanceFieldEffectFlag : 0;
- DFGPFlags |= useGammaCorrectDistanceTable ? kGammaCorrect_DistanceFieldEffectFlag : 0;
- DFGPFlags |= MT::kAliasedDistanceField == maskType ? kAliased_DistanceFieldEffectFlag : 0;
-
- if (isLCD) {
- DFGPFlags |= kUseLCD_DistanceFieldEffectFlag;
- DFGPFlags |= MT::kLCDBGRDistanceField == maskType ? kBGR_DistanceFieldEffectFlag : 0;
- }
+ auto [maskType, DFGPFlags, useGammaCorrectDistanceTable] =
+ calculate_sdf_parameters(*rtc, drawMatrix, fUseLCDText, fAntiAliased);
GrRecordingContext* const context = rtc->recordingContext();
GrAtlasTextOp::Geometry* geometry = GrAtlasTextOp::Geometry::Make(