Loading libs/hwui/BakedOpDispatcher.cpp +25 −14 Original line number Diff line number Diff line Loading @@ -734,9 +734,19 @@ void BakedOpDispatcher::onTextureLayerOp(BakedOpRenderer& renderer, const Textur } void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state) { // Note that we don't use op->paint in this function - it's never set on a LayerOp OffscreenBuffer* buffer = *op.layerHandle; // Note that we don't use op->paint here - it's never set on a LayerOp if (CC_UNLIKELY(!buffer)) { // Layer was not allocated, which can occur if there were no draw ops inside. We draw the // equivalent by drawing a rect with the same layer properties (alpha/xfer/filter). SkPaint paint; paint.setAlpha(op.alpha * 255); paint.setXfermodeMode(op.mode); paint.setColorFilter(op.colorFilter); RectOp rectOp(op.unmappedBounds, op.localMatrix, op.localClip, &paint); BakedOpDispatcher::onRectOp(renderer, rectOp, state); } else { float layerAlpha = op.alpha * state.alpha; Glop glop; GlopBuilder(renderer.renderState(), renderer.caches(), &glop) Loading @@ -753,6 +763,7 @@ void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, renderer.renderState().layerPool().putOrDelete(buffer); } } } void BakedOpDispatcher::onCopyToLayerOp(BakedOpRenderer& renderer, const CopyToLayerOp& op, const BakedOpState& state) { LOG_ALWAYS_FATAL_IF(*(op.layerHandle) != nullptr, "layer already exists!"); Loading libs/hwui/FrameBuilder.h +2 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,8 @@ public: layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers); GL_CHECKPOINT(MODERATE); renderer.endLayer(); } else if (!layer.empty()) { // save layer - skip entire layer if empty } else if (!layer.empty()) { // save layer - skip entire layer if empty (in which case, LayerOp has null layer). layer.offscreenBuffer = renderer.startTemporaryLayer(layer.width, layer.height); GL_CHECKPOINT(MODERATE); layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers); Loading Loading
libs/hwui/BakedOpDispatcher.cpp +25 −14 Original line number Diff line number Diff line Loading @@ -734,9 +734,19 @@ void BakedOpDispatcher::onTextureLayerOp(BakedOpRenderer& renderer, const Textur } void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state) { // Note that we don't use op->paint in this function - it's never set on a LayerOp OffscreenBuffer* buffer = *op.layerHandle; // Note that we don't use op->paint here - it's never set on a LayerOp if (CC_UNLIKELY(!buffer)) { // Layer was not allocated, which can occur if there were no draw ops inside. We draw the // equivalent by drawing a rect with the same layer properties (alpha/xfer/filter). SkPaint paint; paint.setAlpha(op.alpha * 255); paint.setXfermodeMode(op.mode); paint.setColorFilter(op.colorFilter); RectOp rectOp(op.unmappedBounds, op.localMatrix, op.localClip, &paint); BakedOpDispatcher::onRectOp(renderer, rectOp, state); } else { float layerAlpha = op.alpha * state.alpha; Glop glop; GlopBuilder(renderer.renderState(), renderer.caches(), &glop) Loading @@ -753,6 +763,7 @@ void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, renderer.renderState().layerPool().putOrDelete(buffer); } } } void BakedOpDispatcher::onCopyToLayerOp(BakedOpRenderer& renderer, const CopyToLayerOp& op, const BakedOpState& state) { LOG_ALWAYS_FATAL_IF(*(op.layerHandle) != nullptr, "layer already exists!"); Loading
libs/hwui/FrameBuilder.h +2 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,8 @@ public: layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers); GL_CHECKPOINT(MODERATE); renderer.endLayer(); } else if (!layer.empty()) { // save layer - skip entire layer if empty } else if (!layer.empty()) { // save layer - skip entire layer if empty (in which case, LayerOp has null layer). layer.offscreenBuffer = renderer.startTemporaryLayer(layer.width, layer.height); GL_CHECKPOINT(MODERATE); layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers); Loading