void GrGLMagnifierEffect::setData(const GrGLProgramDataManager& pdman, const GrProcessor& effect) { const GrMagnifierEffect& zoom = effect.cast<GrMagnifierEffect>(); pdman.set2f(fOffsetVar, zoom.x_offset(), zoom.y_offset()); pdman.set2f(fInvZoomVar, zoom.x_inv_zoom(), zoom.y_inv_zoom()); pdman.set2f(fInvInsetVar, zoom.x_inv_inset(), zoom.y_inv_inset()); pdman.set4f(fBoundsVar, zoom.bounds().x(), zoom.bounds().y(), zoom.bounds().width(), zoom.bounds().height()); }
void GLAARectEffect::setData(const GrGLProgramDataManager& pdman, const GrProcessor& processor) { const AARectEffect& aare = processor.cast<AARectEffect>(); const SkRect& rect = aare.getRect(); if (rect != fPrevRect) { pdman.set4f(fRectUniform, rect.fLeft + 0.5f, rect.fTop + 0.5f, rect.fRight - 0.5f, rect.fBottom - 0.5f); fPrevRect = rect; } }
void GLEllipseEffect::onSetData(const GrGLProgramDataManager& pdman, const GrProcessor& effect) { const EllipseEffect& ee = effect.cast<EllipseEffect>(); if (ee.getRadii() != fPrevRadii || ee.getCenter() != fPrevCenter) { SkScalar invRXSqd = 1.f / (ee.getRadii().fX * ee.getRadii().fX); SkScalar invRYSqd = 1.f / (ee.getRadii().fY * ee.getRadii().fY); pdman.set4f(fEllipseUniform, ee.getCenter().fX, ee.getCenter().fY, invRXSqd, invRYSqd); fPrevCenter = ee.getCenter(); fPrevRadii = ee.getRadii(); } }
void GLEllipticalRRectEffect::setData(const GrGLProgramDataManager& pdman, const GrProcessor& effect) { const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>(); const SkRRect& rrect = erre.getRRect(); if (rrect != fPrevRRect) { SkRect rect = rrect.getBounds(); const SkVector& r0 = rrect.radii(SkRRect::kUpperLeft_Corner); SkASSERT(r0.fX >= kRadiusMin); SkASSERT(r0.fY >= kRadiusMin); switch (erre.getRRect().getType()) { case SkRRect::kSimple_Type: rect.inset(r0.fX, r0.fY); pdman.set2f(fInvRadiiSqdUniform, 1.f / (r0.fX * r0.fX), 1.f / (r0.fY * r0.fY)); break; case SkRRect::kNinePatch_Type: { const SkVector& r1 = rrect.radii(SkRRect::kLowerRight_Corner); SkASSERT(r1.fX >= kRadiusMin); SkASSERT(r1.fY >= kRadiusMin); rect.fLeft += r0.fX; rect.fTop += r0.fY; rect.fRight -= r1.fX; rect.fBottom -= r1.fY; pdman.set4f(fInvRadiiSqdUniform, 1.f / (r0.fX * r0.fX), 1.f / (r0.fY * r0.fY), 1.f / (r1.fX * r1.fX), 1.f / (r1.fY * r1.fY)); break; } default: SkFAIL("RRect should always be simple or nine-patch."); } pdman.set4f(fInnerRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBottom); fPrevRRect = rrect; } }
void GLCircleEffect::onSetData(const GrGLProgramDataManager& pdman, const GrProcessor& processor) { const CircleEffect& ce = processor.cast<CircleEffect>(); if (ce.getRadius() != fPrevRadius || ce.getCenter() != fPrevCenter) { SkScalar radius = ce.getRadius(); if (GrProcessorEdgeTypeIsInverseFill(ce.getEdgeType())) { radius -= 0.5f; } else { radius += 0.5f; } pdman.set4f(fCircleUniform, ce.getCenter().fX, ce.getCenter().fY, radius, SkScalarInvert(radius)); fPrevCenter = ce.getCenter(); fPrevRadius = ce.getRadius(); } }
void onSetData(const GrGLProgramDataManager& pdman, const GrProcessor& proc) override { const GrArithmeticFP& arith = proc.cast<GrArithmeticFP>(); pdman.set4f(fKUni, arith.k1(), arith.k2(), arith.k3(), arith.k4()); fEnforcePMColor = arith.enforcePMColor(); }
void GLCircularRRectEffect::setData(const GrGLProgramDataManager& pdman, const GrProcessor& processor) { const CircularRRectEffect& crre = processor.cast<CircularRRectEffect>(); const SkRRect& rrect = crre.getRRect(); if (rrect != fPrevRRect) { SkRect rect = rrect.getBounds(); SkScalar radius = 0; switch (crre.getCircularCornerFlags()) { case CircularRRectEffect::kAll_CornerFlags: SkASSERT(rrect.isSimpleCircular()); radius = rrect.getSimpleRadii().fX; SkASSERT(radius >= kRadiusMin); rect.inset(radius, radius); break; case CircularRRectEffect::kTopLeft_CornerFlag: radius = rrect.radii(SkRRect::kUpperLeft_Corner).fX; rect.fLeft += radius; rect.fTop += radius; rect.fRight += 0.5f; rect.fBottom += 0.5f; break; case CircularRRectEffect::kTopRight_CornerFlag: radius = rrect.radii(SkRRect::kUpperRight_Corner).fX; rect.fLeft -= 0.5f; rect.fTop += radius; rect.fRight -= radius; rect.fBottom += 0.5f; break; case CircularRRectEffect::kBottomRight_CornerFlag: radius = rrect.radii(SkRRect::kLowerRight_Corner).fX; rect.fLeft -= 0.5f; rect.fTop -= 0.5f; rect.fRight -= radius; rect.fBottom -= radius; break; case CircularRRectEffect::kBottomLeft_CornerFlag: radius = rrect.radii(SkRRect::kLowerLeft_Corner).fX; rect.fLeft += radius; rect.fTop -= 0.5f; rect.fRight += 0.5f; rect.fBottom -= radius; break; case CircularRRectEffect::kLeft_CornerFlags: radius = rrect.radii(SkRRect::kUpperLeft_Corner).fX; rect.fLeft += radius; rect.fTop += radius; rect.fRight += 0.5f; rect.fBottom -= radius; break; case CircularRRectEffect::kTop_CornerFlags: radius = rrect.radii(SkRRect::kUpperLeft_Corner).fX; rect.fLeft += radius; rect.fTop += radius; rect.fRight -= radius; rect.fBottom += 0.5f; break; case CircularRRectEffect::kRight_CornerFlags: radius = rrect.radii(SkRRect::kUpperRight_Corner).fX; rect.fLeft -= 0.5f; rect.fTop += radius; rect.fRight -= radius; rect.fBottom -= radius; break; case CircularRRectEffect::kBottom_CornerFlags: radius = rrect.radii(SkRRect::kLowerLeft_Corner).fX; rect.fLeft += radius; rect.fTop -= 0.5f; rect.fRight -= radius; rect.fBottom -= radius; break; default: SkFAIL("Should have been one of the above cases."); } pdman.set4f(fInnerRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBottom); pdman.set1f(fRadiusPlusHalfUniform, radius + 0.5f); fPrevRRect = rrect; } }