reorganize GrAtlasTextOp creation
Break the GrAtlasTextOp ctor into a mask version, and an SDFT version.
Reorganize geometry creation to allow more of the GrAtlasSubRun API
to be private.
Change-Id: Ic29d4026a15386d135e0fabc4f270810d1638b2d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/303262
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp
index 55ce686..f527bc5 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -35,40 +35,52 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
GrAtlasTextOp::GrAtlasTextOp(MaskType maskType,
+ bool needsTransform,
+ int glyphCount,
+ SkRect deviceRect,
GrPaint&& paint,
- GrAtlasSubRun* subrun,
- const SkMatrix& drawMatrix,
- SkPoint drawOrigin,
- const SkIRect& clipRect,
- const SkPMColor4f& filteredColor,
+ Geometry&& geo)
+ : INHERITED{ClassID()}
+ , fMaskType{maskType}
+ , fNeedsGlyphTransform{needsTransform}
+ , fLuminanceColor{0}
+ , fUseGammaCorrectDistanceTable{false}
+ , fDFGPFlags{0}
+ , fGeoDataAllocSize{kMinGeometryAllocated}
+ , fProcessors{std::move(paint)}
+ , fNumGlyphs{glyphCount} {
+ fGeoData[0] = std::move(geo);
+ fGeoCount = 1;
+
+ // We don't have tight bounds on the glyph paths in device space. For the purposes of bounds
+ // we treat this as a set of non-AA rects rendered with a texture.
+ this->setBounds(deviceRect, HasAABloat::kNo, IsHairline::kNo);
+}
+
+GrAtlasTextOp::GrAtlasTextOp(MaskType maskType,
+ bool needsTransform,
+ int glyphCount,
+ SkRect deviceRect,
SkColor luminanceColor,
bool useGammaCorrectDistanceTable,
- uint32_t DFGPFlags)
- : INHERITED(ClassID())
+ uint32_t DFGPFlags,
+ GrPaint&& paint,
+ Geometry&& geo)
+ : INHERITED{ClassID()}
, fMaskType{maskType}
- , fNeedsGlyphTransform{subrun->needsTransform()}
+ , fNeedsGlyphTransform{needsTransform}
, fLuminanceColor{luminanceColor}
, fUseGammaCorrectDistanceTable{useGammaCorrectDistanceTable}
, fDFGPFlags{DFGPFlags}
, fGeoDataAllocSize{kMinGeometryAllocated}
, fProcessors{std::move(paint)}
- , fNumGlyphs{subrun->glyphCount()} {
- GrAtlasTextOp::Geometry& geometry = fGeoData[0];
-
- // Unref handled in ~GrAtlasTextOp().
- geometry.fBlob = SkRef(subrun->fBlob);
- geometry.fSubRunPtr = subrun;
- geometry.fDrawMatrix = drawMatrix;
- geometry.fDrawOrigin = drawOrigin;
- geometry.fClipRect = clipRect;
- geometry.fColor = subrun->maskFormat() == kARGB_GrMaskFormat ? SK_PMColor4fWHITE
- : filteredColor;
+ , fNumGlyphs{glyphCount} {
+ fGeoData[0] = std::move(geo);
fGeoCount = 1;
- SkRect bounds = subrun->deviceRect(drawMatrix, drawOrigin);
// We don't have tight bounds on the glyph paths in device space. For the purposes of bounds
// we treat this as a set of non-AA rects rendered with a texture.
- this->setBounds(bounds, HasAABloat::kNo, IsHairline::kNo);
+ this->setBounds(deviceRect, HasAABloat::kNo, IsHairline::kNo);
}
void GrAtlasTextOp::Geometry::fillVertexData(void *dst, int offset, int count) const {