26 std::unique_ptr<GrDynamicAtlas> dynamicAtlas)
28 dynamicAtlas->writeView(*rContext->
priv().caps()),
29 rContext->
priv().auditTrail(),
31 , fDynamicAtlas(
std::move(dynamicAtlas)) {
35 SkIPoint pathDevTopLeft,
int widthInAtlas,
int heightInAtlas,
36 bool transposedInAtlas,
SkIPoint16* locationInAtlas) {
39 SkASSERT(!fDynamicAtlas->isInstantiated());
41 if (!fDynamicAtlas->addRect(widthInAtlas, heightInAtlas, locationInAtlas)) {
45 SkMatrix pathToAtlasMatrix = viewMatrix;
46 if (transposedInAtlas) {
47 std::swap(pathToAtlasMatrix[0], pathToAtlasMatrix[3]);
48 std::swap(pathToAtlasMatrix[1], pathToAtlasMatrix[4]);
50 pathToAtlasMatrix.
setTranslateX(ty - pathDevTopLeft.
y() + locationInAtlas->
x());
51 pathToAtlasMatrix.
setTranslateY(tx - pathDevTopLeft.
x() + locationInAtlas->
y());
53 pathToAtlasMatrix.
postTranslate(locationInAtlas->
x() - pathDevTopLeft.
x(),
54 locationInAtlas->
y() - pathDevTopLeft.
y());
58 fWindingPathList.add(&fPathDrawAllocator, pathToAtlasMatrix, path);
60 fEvenOddPathList.add(&fPathDrawAllocator, pathToAtlasMatrix, path);
69 SkASSERT(!fDynamicAtlas->isInstantiated());
74 this->
target(0)->priv().setLazyDimensions(fDynamicAtlas->drawBounds());
75 this->
target(0)->asRenderTargetProxy()->setNeedsStencil();
99 for (
const auto* pathList : {&fWindingPathList, &fEvenOddPathList}) {
100 if (pathList->pathCount() > 0) {
101 auto op = GrOp::Make<PathStencilCoverOp>(
103 pathList->pathDrawList(),
104 pathList->totalCombinedPathVerbCnt(),
105 pathList->pathCount(),
110 this->addAtlasDrawOp(std::move(op), caps);
128 stencil = &kTestStencil;
162 this->addAtlasDrawOp(std::move(op), *rContext->
priv().
caps());
168 auto drawOp =
static_cast<GrDrawOp*
>(op.get());
171 auto processorAnalysis = drawOp->
finalize(caps,
nullptr,
173 SkASSERT(!processorAnalysis.requiresDstTexture());
174 SkASSERT(!processorAnalysis.usesNonCoherentHWBlending());
176 drawOp->setClippedBounds(drawOp->bounds());
177 this->
recordOp(std::move(op),
true, processorAnalysis,
nullptr,
nullptr, caps);
184 if (this->
target(0)->requiresManualMSAAResolve()) {
GrFillRule GrFillRuleForSkPath(const SkPath &path)
static constexpr GrClampType GrColorTypeClampType(GrColorType colorType)
constexpr SkPMColor4f SK_PMColor4fWHITE
constexpr SkPMColor4f SK_PMColor4fTRANSPARENT
const GrCaps * caps() const
bool discardStencilValuesAfterRenderPass() const
bool performColorClearsAsDraws() const
bool performStencilClearsAsDraws() const
virtual GrProcessorSet::Analysis finalize(const GrCaps &, const GrAppliedClip *, GrClampType)=0
static constexpr GrSurfaceOrigin kTextureOrigin
void resolveRenderTarget(GrRenderTarget *, const SkIRect &resolveRect)
std::unique_ptr< GrOp > Owner
GrRecordingContextPriv priv()
static const GrXPFactory * FromBlendMode(SkBlendMode)
SkMatrix & postTranslate(SkScalar dx, SkScalar dy)
SkMatrix & setTranslateY(SkScalar v)
SkScalar getTranslateY() const
SkMatrix & setTranslateX(SkScalar v)
SkScalar getTranslateX() const
ExpectedOutcome onMakeClosed(GrRecordingContext *, SkIRect *targetUpdateBounds) override
AtlasRenderTask(GrRecordingContext *, sk_sp< GrArenas >, std::unique_ptr< GrDynamicAtlas >)
bool addPath(const SkMatrix &, const SkPath &, SkIPoint pathDevTopLeft, int widthInAtlas, int heightInAtlas, bool transposedInAtlas, SkIPoint16 *locationInAtlas)
bool onExecute(GrOpFlushState *flushState) override
static GrOp::Owner Make(GrRecordingContext *, GrPaint &&, GrAAType, DrawQuad *, const GrUserStencilSettings *=nullptr, InputFlags=InputFlags::kNone)
void recordOp(GrOp::Owner, bool usesMSAA, GrProcessorSet::Analysis, GrAppliedClip *, const GrDstProxyView *, const GrCaps &)
void setColorLoadOp(GrLoadOp op, std::array< float, 4 > color={0, 0, 0, 0})
bool onExecute(GrOpFlushState *flushState) override
void setInitialStencilContent(StencilContent initialContent)
ExpectedOutcome onMakeClosed(GrRecordingContext *, SkIRect *targetUpdateBounds) override
FlPixelBufferTexturePrivate * priv
static constexpr GrUserStencilSettings kTestAndResetStencil(GrUserStencilSettings::StaticInit< 0x0000, GrUserStencilTest::kLessIfInClip, 0x0001, GrUserStencilOp::kZero, GrUserStencilOp::kReplace, 0xffff >())
static SkIRect MakeIRectRelativeTo(GrSurfaceOrigin origin, int rtHeight, SkIRect devRect)
static constexpr Init< Ref, Test, TestMask, PassOp, FailOp, WriteMask > StaticInit()
constexpr int32_t y() const
constexpr int32_t x() const
static constexpr SkIRect MakeSize(const SkISize &size)
void outset(float dx, float dy)