19 if (fTessellationProgram) {
29 auto analysis = fProcessors.
finalize(this->headDraw().fColor,
35 &this->headDraw().fColor);
36 if (!analysis.usesLocalCoords()) {
48 auto* op = grOp->
cast<PathTessellateOp>();
49 bool canMerge = fAAType == op->fAAType &&
50 fStencil == op->fStencil &&
51 fProcessors == op->fProcessors &&
52 fShaderMatrix == op->fShaderMatrix;
54 fTotalCombinedPathVerbCnt += op->fTotalCombinedPathVerbCnt;
55 fPatchAttribs |= op->fPatchAttribs;
58 this->headDraw().
fColor != op->headDraw().fColor) {
63 *fPathDrawTail = op->fPathDrawList;
64 fPathDrawTail = op->fPathDrawTail;
76 std::move(fProcessors));
78 args.fCaps->shaderCaps()->fInfinitySupport,
83 this->headDraw().fColor,
95 this->prepareTessellator({context->
priv().recordTimeAllocator(), writeView, usesMSAASurface,
96 &dstProxyView, renderPassXferBarriers, colorLoadOp,
111 fTessellator->
prepare(flushState,
114 fTotalCombinedPathVerbCnt);
123 fTessellator->
draw(flushState);
std::function< void(GrSurfaceProxy *, skgpu::Mipmapped)> GrVisitProxyFunc
static SkPath clip(const SkPath &path, const SkHalfPlane &plane)
static GrAppliedClip Disabled()
const GrCaps * caps() const
GrLoadOp colorLoadOp() const final
const GrDstProxyView & dstProxyView() const final
GrXferBarrierFlags renderPassBarriers() const final
SkArenaAlloc * allocator() override
void bindPipelineAndScissorClip(const GrProgramInfo &programInfo, const SkRect &drawBounds)
const GrSurfaceProxyView & writeView() const final
GrAppliedClip detachAppliedClip() final
const GrCaps & caps() const final
void bindTextures(const GrGeometryProcessor &geomProc, const GrSurfaceProxy &singleGeomProcTexture, const GrPipeline &pipeline)
bool usesMSAASurface() const final
const SkRect & bounds() const
static GrPathTessellationShader * Make(const GrShaderCaps &, SkArenaAlloc *, const SkMatrix &viewMatrix, const SkPMColor4f &, PatchAttribs)
void visitProxies(const GrVisitProxyFunc &) const
void visitProxies(const GrVisitProxyFunc &) const
Analysis finalize(const GrProcessorAnalysisColor &, const GrProcessorAnalysisCoverage, const GrAppliedClip *, const GrUserStencilSettings *, const GrCaps &, GrClampType, SkPMColor4f *inputColorOverride)
const GrPipeline & pipeline() const
const GrGeometryProcessor & geomProc() const
void recordProgramInfo(const GrProgramInfo *programInfo)
GrRecordingContextPriv priv()
GrRenderTargetProxy * asRenderTargetProxy() const
static const GrPipeline * MakePipeline(const ProgramArgs &, GrAAType, GrAppliedClip &&, GrProcessorSet &&)
static GrProgramInfo * MakeProgram(const ProgramArgs &args, const GrTessellationShader *shader, const GrPipeline *pipeline, const GrUserStencilSettings *stencil)
static const SkMatrix & I()
virtual void prepare(GrMeshDrawTarget *target, const SkMatrix &shaderMatrix, const PathDrawList &pathDrawList, int totalCombinedPathVerbCnt)=0
virtual void draw(GrOpFlushState *flushState) const =0
PatchAttribs patchAttribs() const
static PathWedgeTessellator * Make(SkArenaAlloc *arena, bool infinitySupport, PatchAttribs attribs=PatchAttribs::kNone)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args