Remove most modifiers of processors on GrPipelineBuilder
Change-Id: I2fc12a97d694e5c0d86c9a4e0818a058905c8cf0 Reviewed-on: https://skia-review.googlesource.com/6993 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com>
This commit is contained in:
parent
2503ab6e92
commit
d4652ca1b7
@ -199,7 +199,8 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
operator GrPaint&&() { return std::move(*fPaint); }
|
||||
operator GrPaint&&() && { return std::move(*fPaint); }
|
||||
GrPaint& paint() { return *fPaint; }
|
||||
|
||||
private:
|
||||
SkTLazy<GrPaint> fStorage;
|
||||
|
@ -61,41 +61,6 @@ public:
|
||||
return fCoverageFragmentProcessors[idx].get();
|
||||
}
|
||||
|
||||
void addColorFragmentProcessor(sk_sp<GrFragmentProcessor> processor) {
|
||||
SkASSERT(processor);
|
||||
fColorFragmentProcessors.push_back(std::move(processor));
|
||||
}
|
||||
|
||||
void addCoverageFragmentProcessor(sk_sp<GrFragmentProcessor> processor) {
|
||||
SkASSERT(processor);
|
||||
fCoverageFragmentProcessors.push_back(std::move(processor));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a GrSimpleTextureEffect that uses local coords as texture coordinates.
|
||||
*/
|
||||
void addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Make(texture, nullptr, matrix));
|
||||
}
|
||||
|
||||
void addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(texture, nullptr, matrix));
|
||||
}
|
||||
|
||||
void addColorTextureProcessor(GrTexture* texture,
|
||||
const SkMatrix& matrix,
|
||||
const GrSamplerParams& params) {
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Make(texture, nullptr, matrix,
|
||||
params));
|
||||
}
|
||||
|
||||
void addCoverageTextureProcessor(GrTexture* texture,
|
||||
const SkMatrix& matrix,
|
||||
const GrSamplerParams& params) {
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(texture, nullptr, matrix,
|
||||
params));
|
||||
}
|
||||
|
||||
/**
|
||||
* When this object is destroyed it will remove any color/coverage FPs from the pipeline builder
|
||||
* that were added after its constructor.
|
||||
@ -140,18 +105,6 @@ public:
|
||||
/// @name Blending
|
||||
////
|
||||
|
||||
/**
|
||||
* Installs a GrXPFactory. This object controls how src color, fractional pixel coverage,
|
||||
* and the dst color are blended.
|
||||
*/
|
||||
void setXPFactory(const GrXPFactory* xpFactory) { fXPFactory = xpFactory; }
|
||||
|
||||
/**
|
||||
* Sets a GrXPFactory that disables color writes to the destination. This is useful when
|
||||
* rendering to the stencil buffer.
|
||||
*/
|
||||
void setDisableColorXPFactory() { fXPFactory = GrDisableColorXPFactory::Get(); }
|
||||
|
||||
const GrXPFactory* getXPFactory() const { return fXPFactory; }
|
||||
|
||||
/**
|
||||
@ -288,6 +241,13 @@ public:
|
||||
bool usePLSDstRead(const GrDrawOp*) const;
|
||||
|
||||
private:
|
||||
// This exists solely for AutoRestoreFragmentProcessor, which itself exists solely to install
|
||||
// an applied clip's FP. This will be removed soon.
|
||||
void addCoverageFragmentProcessor(sk_sp<GrFragmentProcessor> processor) {
|
||||
SkASSERT(processor);
|
||||
fCoverageFragmentProcessors.push_back(std::move(processor));
|
||||
}
|
||||
|
||||
// Some of the auto restore objects assume that no effects are removed during their lifetime.
|
||||
// This is used to assert that this condition holds.
|
||||
SkDEBUGCODE(mutable int fBlockEffectRemovalCnt;)
|
||||
|
@ -183,12 +183,9 @@ void GrSWMaskHelper::DrawToTargetWithShapeMask(GrTexture* texture,
|
||||
maskMatrix.preConcat(viewMatrix);
|
||||
std::unique_ptr<GrDrawOp> op = GrRectOpFactory::MakeNonAAFill(paint.getColor(), SkMatrix::I(),
|
||||
dstRect, nullptr, &invert);
|
||||
paint.addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(
|
||||
texture, nullptr, maskMatrix, GrSamplerParams::kNone_FilterMode));
|
||||
GrPipelineBuilder pipelineBuilder(std::move(paint), GrAAType::kNone);
|
||||
pipelineBuilder.setUserStencil(&userStencilSettings);
|
||||
pipelineBuilder.addCoverageFragmentProcessor(
|
||||
GrSimpleTextureEffect::Make(texture,
|
||||
nullptr,
|
||||
maskMatrix,
|
||||
GrSamplerParams::kNone_FilterMode));
|
||||
renderTargetContext->addDrawOp(pipelineBuilder, clip, std::move(op));
|
||||
}
|
||||
|
@ -557,14 +557,15 @@ bool GrDefaultPathRenderer::internalDrawPath(GrRenderTargetContext* renderTarget
|
||||
} else {
|
||||
std::unique_ptr<GrDrawOp> op =
|
||||
DefaultPathOp::Make(paint.getColor(), path, srcSpaceTol, newCoverage,
|
||||
|
||||
viewMatrix, isHairline, devBounds);
|
||||
GrPipelineBuilder pipelineBuilder(GrPaint::MoveOrNew(paint, lastPassIsBounds), aaType);
|
||||
bool stencilPass = stencilOnly || passCount > 1;
|
||||
GrPaint::MoveOrNew passPaint(paint, stencilPass);
|
||||
if (stencilPass) {
|
||||
passPaint.paint().setXPFactory(GrDisableColorXPFactory::Get());
|
||||
}
|
||||
GrPipelineBuilder pipelineBuilder(std::move(passPaint), aaType);
|
||||
pipelineBuilder.setDrawFace(drawFace[p]);
|
||||
pipelineBuilder.setUserStencil(passes[p]);
|
||||
if (passCount > 1) {
|
||||
pipelineBuilder.setDisableColorXPFactory();
|
||||
}
|
||||
renderTargetContext->addDrawOp(pipelineBuilder, clip, std::move(op));
|
||||
}
|
||||
}
|
||||
|
@ -613,20 +613,25 @@ bool GrMSAAPathRenderer::internalDrawPath(GrRenderTargetContext* renderTargetCon
|
||||
SkRect devBounds;
|
||||
GetPathDevBounds(path, renderTargetContext->width(), renderTargetContext->height(), viewMatrix,
|
||||
&devBounds);
|
||||
SkASSERT(passes[0]);
|
||||
|
||||
std::unique_ptr<GrDrawOp> op = MSAAPathOp::Make(paint.getColor(), path, viewMatrix, devBounds);
|
||||
if (!op) {
|
||||
return false;
|
||||
SkASSERT(passes[0]);
|
||||
{ // First pass
|
||||
std::unique_ptr<GrDrawOp> op =
|
||||
MSAAPathOp::Make(paint.getColor(), path, viewMatrix, devBounds);
|
||||
if (!op) {
|
||||
return false;
|
||||
}
|
||||
bool firstPassIsStencil = stencilOnly || passes[1];
|
||||
// If we have a cover pass then we ignore the paint in the first pass and apply it in the
|
||||
// second.
|
||||
GrPaint::MoveOrNew firstPassPaint(paint, firstPassIsStencil);
|
||||
if (firstPassIsStencil) {
|
||||
firstPassPaint.paint().setXPFactory(GrDisableColorXPFactory::Get());
|
||||
}
|
||||
GrPipelineBuilder pipelineBuilder(std::move(firstPassPaint), aaType);
|
||||
pipelineBuilder.setUserStencil(passes[0]);
|
||||
renderTargetContext->addDrawOp(pipelineBuilder, clip, std::move(op));
|
||||
}
|
||||
// If we have a cover pass then we ignore the paint in the first pass and apply it in the
|
||||
// second.
|
||||
GrPipelineBuilder pipelineBuilder(GrPaint::MoveOrNew(paint, passes[1]), aaType);
|
||||
pipelineBuilder.setUserStencil(passes[0]);
|
||||
if (passes[1]) {
|
||||
pipelineBuilder.setDisableColorXPFactory();
|
||||
}
|
||||
renderTargetContext->addDrawOp(pipelineBuilder, clip, std::move(op));
|
||||
|
||||
if (passes[1]) {
|
||||
SkRect bounds;
|
||||
|
Loading…
Reference in New Issue
Block a user