Lines Matching defs:op

507  * E.g. a BitmapOp op then would be dispatched to FrameBuilder::onBitmapOp(const BitmapOp&)
510 [](FrameBuilder& frameBuilder, const RecordedOp& op) { frameBuilder.defer##Type(static_cast<const Type&>(op)); },
512 typedef void (*OpDispatcher) (FrameBuilder& frameBuilder, const RecordedOp& op);
523 const RecordedOp* op = displayList.getOps()[opIndex];
524 receivers[op->opId](*this, *op);
536 void FrameBuilder::deferRenderNodeOpImpl(const RenderNodeOp& op) {
537 if (op.renderNode->nothingToDraw()) return;
540 // apply state from RecordedOp (clip first, since op's clip is transformed by current matrix)
541 mCanvasState.writableSnapshot()->applyClip(op.localClip,
543 mCanvasState.concatMatrix(op.localMatrix);
546 deferNodePropsAndOps(*op.renderNode);
551 void FrameBuilder::deferRenderNodeOp(const RenderNodeOp& op) {
552 if (!op.skipInOrderDraw) {
553 deferRenderNodeOpImpl(op);
558 * Defers an unmergeable, strokeable op, accounting correctly
561 BakedOpState* FrameBuilder::deferStrokeableOp(const RecordedOp& op, batchid_t batchId,
563 // Note: here we account for stroke when baking the op
565 mAllocator, *mCanvasState.writableSnapshot(), op, strokeBehavior);
568 if (op.opId == RecordedOpId::RectOp && op.paint->getStyle() != SkPaint::kStroke_Style) {
569 bakedState->setupOpacity(op.paint);
582 static batchid_t tessBatchId(const RecordedOp& op) {
583 const SkPaint& paint = *(op.paint);
589 void FrameBuilder::deferArcOp(const ArcOp& op) {
590 deferStrokeableOp(op, tessBatchId(op));
598 void FrameBuilder::deferBitmapOp(const BitmapOp& op) {
599 BakedOpState* bakedState = tryBakeOpState(op);
602 if (op.bitmap->isOpaque()) {
603 bakedState->setupOpacity(op.paint);
611 && PaintUtils::getXfermodeDirect(op.paint) == SkXfermode::kSrcOver_Mode
612 && op.bitmap->colorType() != kAlpha_8_SkColorType
614 mergeid_t mergeId = reinterpret_cast<mergeid_t>(op.bitmap->getGenerationID());
622 void FrameBuilder::deferBitmapMeshOp(const BitmapMeshOp& op) {
623 BakedOpState* bakedState = tryBakeOpState(op);
628 void FrameBuilder::deferBitmapRectOp(const BitmapRectOp& op) {
629 BakedOpState* bakedState = tryBakeOpState(op);
634 void FrameBuilder::deferVectorDrawableOp(const VectorDrawableOp& op) {
635 const SkBitmap& bitmap = op.vectorDrawable->getBitmapUpdateIfDirty();
636 SkPaint* paint = op.vectorDrawable->getPaint();
637 const BitmapRectOp* resolvedOp = mAllocator.create_trivial<BitmapRectOp>(op.unmappedBounds,
638 op.localMatrix,
639 op.localClip,
646 void FrameBuilder::deferCirclePropsOp(const CirclePropsOp& op) {
647 // allocate a temporary oval op (with mAllocator, so it persists until render), so the
649 float x = *(op.x);
650 float y = *(op.y);
651 float radius = *(op.radius);
655 op.localMatrix,
656 op.localClip,
657 op.paint);
661 void FrameBuilder::deferColorOp(const ColorOp& op) {
662 BakedOpState* bakedState = tryBakeUnboundedOpState(op);
667 void FrameBuilder::deferFunctorOp(const FunctorOp& op) {
668 BakedOpState* bakedState = tryBakeUnboundedOpState(op);
673 void FrameBuilder::deferLinesOp(const LinesOp& op) {
674 batchid_t batch = op.paint->isAntiAlias() ? OpBatchType::AlphaVertices : OpBatchType::Vertices;
675 deferStrokeableOp(op, batch, BakedOpState::StrokeBehavior::Forced);
678 void FrameBuilder::deferOvalOp(const OvalOp& op) {
679 deferStrokeableOp(op, tessBatchId(op));
682 void FrameBuilder::deferPatchOp(const PatchOp& op) {
683 BakedOpState* bakedState = tryBakeOpState(op);
687 && PaintUtils::getXfermodeDirect(op.paint) == SkXfermode::kSrcOver_Mode
689 mergeid_t mergeId = reinterpret_cast<mergeid_t>(op.bitmap->getGenerationID());
700 void FrameBuilder::deferPathOp(const PathOp& op) {
701 auto state = deferStrokeableOp(op, OpBatchType::AlphaMaskTexture);
703 mCaches.pathCache.precache(op.path, op.paint);
707 void FrameBuilder::deferPointsOp(const PointsOp& op) {
708 batchid_t batch = op.paint->isAntiAlias() ? OpBatchType::AlphaVertices : OpBatchType::Vertices;
709 deferStrokeableOp(op, batch, BakedOpState::StrokeBehavior::Forced);
712 void FrameBuilder::deferRectOp(const RectOp& op) {
713 deferStrokeableOp(op, tessBatchId(op));
716 void FrameBuilder::deferRoundRectOp(const RoundRectOp& op) {
717 auto state = deferStrokeableOp(op, tessBatchId(op));
718 if (CC_LIKELY(state && !op.paint->getPathEffect())) {
720 mCaches.tessellationCache.precacheRoundRect(state->computedState.transform, *(op.paint),
721 op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.rx, op.ry);
725 void FrameBuilder::deferRoundRectPropsOp(const RoundRectPropsOp& op) {
726 // allocate a temporary round rect op (with mAllocator, so it persists until render), so the
729 Rect(*(op.left), *(op.top), *(op.right), *(op.bottom)),
730 op.localMatrix,
731 op.localClip,
732 op.paint, *op.rx, *op.ry);
736 void FrameBuilder::deferSimpleRectsOp(const SimpleRectsOp& op) {
737 BakedOpState* bakedState = tryBakeOpState(op);
747 void FrameBuilder::deferTextOp(const TextOp& op) {
749 mAllocator, *mCanvasState.writableSnapshot(), op,
753 batchid_t batchId = textBatchId(*(op.paint));
755 && PaintUtils::getXfermodeDirect(op.paint) == SkXfermode::kSrcOver_Mode
757 mergeid_t mergeId = reinterpret_cast<mergeid_t>(op.paint->getColor());
766 fontRenderer.precache(op.paint, op.glyphs, op.glyphCount, SkMatrix::I());
771 fontRenderer.precache(op.paint, op.glyphs, op.glyphCount, SkMatrix::MakeScale(
777 void FrameBuilder::deferTextOnPathOp(const TextOnPathOp& op) {
778 BakedOpState* bakedState = tryBakeUnboundedOpState(op);
780 currentLayer().deferUnmergeableOp(mAllocator, bakedState, textBatchId(*(op.paint)));
783 op.paint, op.glyphs, op.glyphCount, SkMatrix::I());
786 void FrameBuilder::deferTextureLayerOp(const TextureLayerOp& op) {
787 if (CC_UNLIKELY(!op.layer->isRenderable())) return;
789 const TextureLayerOp* textureLayerOp = &op;
791 if (!op.layer->getTransform().isIdentity()) {
792 // non-identity transform present, so 'inject it' into op by copying + replacing matrix
793 Matrix4 combinedMatrix(op.localMatrix);
794 combinedMatrix.multiply(op.layer->getTransform());
795 textureLayerOp = mAllocator.create<TextureLayerOp>(op, combinedMatrix);
832 void FrameBuilder::deferBeginLayerOp(const BeginLayerOp& op) {
833 uint32_t layerWidth = (uint32_t) op.unmappedBounds.getWidth();
834 uint32_t layerHeight = (uint32_t) op.unmappedBounds.getHeight();
842 contentTransform.multiply(op.localMatrix);
843 contentTransform.translate(op.unmappedBounds.left, op.unmappedBounds.top);
874 &op, nullptr);
943 void FrameBuilder::deferBeginUnclippedLayerOp(const BeginUnclippedLayerOp& op) {
945 boundsTransform.multiply(op.localMatrix);
947 Rect dstRect(op.unmappedBounds);
953 // Unclipped layer rejected - push a null op, so next EndUnclippedLayerOp is ignored
962 auto copyToOp = mAllocator.create_trivial<CopyToLayerOp>(op, layerHandle);
977 auto copyFromOp = mAllocator.create_trivial<CopyFromLayerOp>(op, layerHandle);