aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ops/GrAtlasTextOp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/ops/GrAtlasTextOp.h')
-rw-r--r--src/gpu/ops/GrAtlasTextOp.h57
1 files changed, 17 insertions, 40 deletions
diff --git a/src/gpu/ops/GrAtlasTextOp.h b/src/gpu/ops/GrAtlasTextOp.h
index 04f7bae39d..0318a90f8f 100644
--- a/src/gpu/ops/GrAtlasTextOp.h
+++ b/src/gpu/ops/GrAtlasTextOp.h
@@ -14,6 +14,7 @@
#include "text/GrGlyphCache.h"
class SkAtlasTextTarget;
+class GrContext;
class GrAtlasTextOp final : public GrMeshDrawOp {
public:
@@ -40,48 +41,22 @@ public:
GrColor fColor;
};
- static std::unique_ptr<GrAtlasTextOp> MakeBitmap(
- 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;
- }
+ static std::unique_ptr<GrAtlasTextOp> MakeBitmap(GrContext* context,
+ GrPaint&& paint,
+ GrMaskFormat maskFormat,
+ int glyphCount,
+ bool needsTransform);
static std::unique_ptr<GrAtlasTextOp> MakeDistanceField(
- 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;
- }
+ GrContext* context,
+ GrPaint&& paint,
+ int glyphCount,
+ const GrDistanceFieldAdjustTable* distanceAdjustTable,
+ bool useGammaCorrectDistanceTable,
+ SkColor luminanceColor,
+ const SkSurfaceProps& props,
+ bool isAntiAliased,
+ bool useLCD);
// To avoid even the initial copy of the struct, we have a getter for the first item which
// is used to seed the op with its initial geometry. After seeding, the client should call
@@ -118,6 +93,8 @@ public:
void executeForTextTarget(SkAtlasTextTarget*);
private:
+ friend class GrOpMemoryPool; // for ctor
+
// The minimum number of Geometry we will try to allocate.
static constexpr auto kMinGeometryAllocated = 12;