diff options
Diffstat (limited to 'src/gpu/ops/GrAtlasTextOp.cpp')
-rw-r--r-- | src/gpu/ops/GrAtlasTextOp.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp index a83e025a50..eb39079423 100644 --- a/src/gpu/ops/GrAtlasTextOp.cpp +++ b/src/gpu/ops/GrAtlasTextOp.cpp @@ -8,6 +8,7 @@ #include "GrAtlasTextOp.h" #include "GrContext.h" +#include "GrMemoryPool.h" #include "GrOpFlushState.h" #include "GrResourceProvider.h" #include "SkMathPriv.h" @@ -21,6 +22,57 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// +std::unique_ptr<GrAtlasTextOp> GrAtlasTextOp::MakeBitmap(GrContext* context, + GrPaint&& paint, + GrMaskFormat maskFormat, + int glyphCount, + bool needsTransform) { + std::unique_ptr<GrAtlasTextOp> op(new GrAtlasTextOp(std::move(paint))); + + switch (maskFormat) { + case kA8_GrMaskFormat: + op->fMaskType = kGrayscaleCoverageMask_MaskType; + break; + case kA565_GrMaskFormat: + op->fMaskType = kLCDCoverageMask_MaskType; + break; + case kARGB_GrMaskFormat: + op->fMaskType = kColorBitmapMask_MaskType; + break; + } + op->fNumGlyphs = glyphCount; + op->fGeoCount = 1; + op->fLuminanceColor = 0; + op->fNeedsGlyphTransform = needsTransform; + return op; + } + +std::unique_ptr<GrAtlasTextOp> GrAtlasTextOp::MakeDistanceField( + GrContext* context, + GrPaint&& paint, + int glyphCount, + const GrDistanceFieldAdjustTable* distanceAdjustTable, + bool useGammaCorrectDistanceTable, + SkColor luminanceColor, + const SkSurfaceProps& props, + bool isAntiAliased, + bool useLCD) { + std::unique_ptr<GrAtlasTextOp> op(new GrAtlasTextOp(std::move(paint))); + + bool isBGR = SkPixelGeometryIsBGR(props.pixelGeometry()); + bool isLCD = useLCD && SkPixelGeometryIsH(props.pixelGeometry()); + op->fMaskType = !isAntiAliased ? kAliasedDistanceField_MaskType + : isLCD ? (isBGR ? kLCDBGRDistanceField_MaskType + : kLCDDistanceField_MaskType) + : kGrayscaleDistanceField_MaskType; + op->fDistanceAdjustTable.reset(SkRef(distanceAdjustTable)); + op->fUseGammaCorrectDistanceTable = useGammaCorrectDistanceTable; + op->fLuminanceColor = luminanceColor; + op->fNumGlyphs = glyphCount; + op->fGeoCount = 1; + return op; + } + static const int kDistanceAdjustLumShift = 5; void GrAtlasTextOp::init() { |