Skip to content
This repository was archived by the owner on Apr 29, 2021. It is now read-only.

Commit 04f87ac

Browse files
author
Yuncong Zhang
committed
Introduce strokeMult.
1 parent 9edbe3d commit 04f87ac

File tree

2 files changed

+23
-19
lines changed

2 files changed

+23
-19
lines changed

Runtime/ui/renderer/cmdbufferCanvas/rendering/canvas_impl.cs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ bool _mustRenderClip(uint clipGenId, uiRect clipBounds) {
390390

391391
RenderLayer _createMaskLayer(RenderLayer parentLayer, uiRect maskBounds,
392392
_drawPathDrawMeshCallbackDelegate drawCallback,
393-
uiPaint paint, bool convex, float alpha, Texture tex, uiRect texBound, TextBlobMesh textMesh,
393+
uiPaint paint, bool convex, float alpha, float strokeMult, Texture tex, uiRect texBound, TextBlobMesh textMesh,
394394
uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool notEmoji) {
395395
var textureWidth = Mathf.CeilToInt(maskBounds.width * this._devicePixelRatio);
396396
if (textureWidth < 1) {
@@ -419,7 +419,7 @@ RenderLayer _createMaskLayer(RenderLayer parentLayer, uiRect maskBounds,
419419
var maskState = maskLayer.states[maskLayer.states.Count - 1];
420420
maskState.matrix = parentState.matrix;
421421

422-
drawCallback.Invoke(uiPaint.shapeOnly(paint), fillMesh, strokeMesh, convex, alpha, tex, texBound, textMesh, notEmoji);
422+
drawCallback.Invoke(uiPaint.shapeOnly(paint), fillMesh, strokeMesh, convex, alpha, strokeMult, tex, texBound, textMesh, notEmoji);
423423

424424
var removed = this._layers.removeLast();
425425
D.assert(removed == maskLayer);
@@ -481,7 +481,7 @@ RenderLayer _createBlurLayer(RenderLayer maskLayer, float sigmaX, float sigmaY,
481481
}
482482

483483
void _drawWithMaskFilter(uiRect meshBounds, uiPaint paint, uiMaskFilter maskFilter,
484-
uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, Texture tex, uiRect texBound, TextBlobMesh textMesh, bool notEmoji,
484+
uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, float strokeMult, Texture tex, uiRect texBound, TextBlobMesh textMesh, bool notEmoji,
485485
_drawPathDrawMeshCallbackDelegate drawCallback) {
486486
var layer = this._currentLayer;
487487
var clipBounds = layer.layerBounds;
@@ -514,7 +514,7 @@ void _drawWithMaskFilter(uiRect meshBounds, uiPaint paint, uiMaskFilter maskFilt
514514
return;
515515
}
516516

517-
var maskLayer = this._createMaskLayer(layer, maskBounds, drawCallback, paint, convex, alpha, tex, texBound,
517+
var maskLayer = this._createMaskLayer(layer, maskBounds, drawCallback, paint, convex, alpha, strokeMult, tex, texBound,
518518
textMesh, fillMesh, strokeMesh, notEmoji);
519519

520520
var blurLayer = this._createBlurLayer(maskLayer, sigma, sigma, layer);
@@ -528,10 +528,10 @@ void _drawWithMaskFilter(uiRect meshBounds, uiPaint paint, uiMaskFilter maskFilt
528528
layer.draws.Add(CanvasShader.texRT(layer, paint, blurMesh, blurLayer));
529529
}
530530

531-
delegate void _drawPathDrawMeshCallbackDelegate(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha,
531+
delegate void _drawPathDrawMeshCallbackDelegate(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, float strokeMult,
532532
Texture tex, uiRect textBlobBounds, TextBlobMesh textMesh, bool notEmoji);
533533

534-
void _drawPathDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, Texture tex,
534+
void _drawPathDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, float strokeMult, Texture tex,
535535
uiRect textBlobBounds, TextBlobMesh textMesh, bool notEmoji) {
536536
if (!this._applyClip(fillMesh.bounds)) {
537537
ObjectPool<uiMeshMesh>.release(fillMesh);
@@ -548,11 +548,11 @@ void _drawPathDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh stroke
548548
}
549549

550550
if (strokeMesh != null) {
551-
layer.draws.Add(CanvasShader.strokeAlpha(layer, p, 1.0f, strokeMesh));
551+
layer.draws.Add(CanvasShader.strokeAlpha(layer, p, strokeMult, strokeMesh));
552552
}
553553
}
554554

555-
void _drawPathDrawMeshCallback2(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, Texture tex,
555+
void _drawPathDrawMeshCallback2(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, float strokeMult, Texture tex,
556556
uiRect textBlobBounds, TextBlobMesh textMesh, bool notEmoji) {
557557
if (!this._applyClip(strokeMesh.bounds)) {
558558
ObjectPool<uiMeshMesh>.release(strokeMesh);
@@ -561,11 +561,11 @@ void _drawPathDrawMeshCallback2(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strok
561561

562562
var layer = this._currentLayer;
563563

564-
layer.draws.Add(CanvasShader.strokeAlpha(layer, p, alpha, strokeMesh));
564+
layer.draws.Add(CanvasShader.strokeAlpha(layer, p, strokeMult, strokeMesh));
565565
layer.draws.Add(CanvasShader.stroke1(layer, strokeMesh.duplicate()));
566566
}
567567

568-
void _drawTextDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, Texture tex,
568+
void _drawTextDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha, float strokeMult, Texture tex,
569569
uiRect textBlobBounds, TextBlobMesh textMesh, bool notEmoji) {
570570
if (!this._applyClip(textBlobBounds)) {
571571
ObjectPool<TextBlobMesh>.release(textMesh);
@@ -610,14 +610,15 @@ void _drawPath(uiPath path, uiPaint paint) {
610610
var strokeMesh = cache.strokeMesh;
611611
var fmesh = fillMesh.transform(state.matrix);
612612
var smesh = strokeMesh?.transform(state.matrix);
613+
float strokeMult = 1.0f;
613614

614615
if (paint.maskFilter != null && paint.maskFilter.Value.sigma != 0) {
615-
this._drawWithMaskFilter(fmesh.bounds, paint, paint.maskFilter.Value, fmesh, smesh, convex, 0, null,
616+
this._drawWithMaskFilter(fmesh.bounds, paint, paint.maskFilter.Value, fmesh, smesh, convex, 0, strokeMult, null,
616617
uiRectHelper.zero, null, false, this.___drawPathDrawMeshCallback);
617618
return;
618619
}
619620

620-
this._drawPathDrawMeshCallback(paint, fmesh, smesh, convex, 0, null, uiRectHelper.zero, null, false);
621+
this._drawPathDrawMeshCallback(paint, fmesh, smesh, convex, 0, strokeMult, null, uiRectHelper.zero, null, false);
621622
}
622623
else {
623624
var state = this._currentLayer.currentState;
@@ -635,10 +636,13 @@ void _drawPath(uiPath path, uiPaint paint) {
635636
strokeWidth = this._fringeWidth;
636637
}
637638

639+
strokeWidth = strokeWidth / state.scale * 0.5f;
640+
float strokeMult = (this._fringeWidth * 0.5f + strokeWidth * 0.5f) / this._fringeWidth;
641+
638642
var cache = path.flatten(state.scale * this._devicePixelRatio);
639643

640644
var strokeMesh = cache.computeStrokeMesh(
641-
strokeWidth / state.scale * 0.5f,
645+
strokeWidth,
642646
this._fringeWidth,
643647
paint.strokeCap,
644648
paint.strokeJoin,
@@ -647,12 +651,12 @@ void _drawPath(uiPath path, uiPaint paint) {
647651
var mesh = strokeMesh.transform(state.matrix);
648652

649653
if (paint.maskFilter != null && paint.maskFilter.Value.sigma != 0) {
650-
this._drawWithMaskFilter(mesh.bounds, paint, paint.maskFilter.Value, null, mesh, false, alpha, null,
654+
this._drawWithMaskFilter(mesh.bounds, paint, paint.maskFilter.Value, null, mesh, false, alpha, strokeMult, null,
651655
uiRectHelper.zero, null, false, this.___drawPathDrawMeshCallback2);
652656
return;
653657
}
654658

655-
this._drawPathDrawMeshCallback2(paint, null, mesh, false, alpha, null, uiRectHelper.zero, null, false);
659+
this._drawPathDrawMeshCallback2(paint, null, mesh, false, alpha, strokeMult, null, uiRectHelper.zero, null, false);
656660
}
657661
}
658662

@@ -962,12 +966,12 @@ void _drawTextBlob(TextBlob textBlob, uiOffset offset, uiPaint paint) {
962966
}
963967

964968
if (paint.maskFilter != null && paint.maskFilter.Value.sigma != 0) {
965-
this._drawWithMaskFilter(textBlobBounds, paint, paint.maskFilter.Value, null, null, false, 0, tex,
969+
this._drawWithMaskFilter(textBlobBounds, paint, paint.maskFilter.Value, null, null, false, 0, 0, tex,
966970
textBlobBounds, mesh, notEmoji, this.___drawTextDrawMeshCallback);
967971
return;
968972
}
969973

970-
this._drawTextDrawMeshCallback(paint, null, null, false, 0, tex, textBlobBounds, mesh, notEmoji);
974+
this._drawTextDrawMeshCallback(paint, null, null, false, 0, 0, tex, textBlobBounds, mesh, notEmoji);
971975
}
972976

973977
public void flush(uiPicture picture) {

Runtime/ui/renderer/cmdbufferCanvas/rendering/canvas_shader.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,9 +386,9 @@ public static PictureFlusher.CmdDraw stroke1(PictureFlusher.RenderLayer layer, u
386386
);
387387
}
388388

389-
public static PictureFlusher.CmdDraw strokeAlpha(PictureFlusher.RenderLayer layer, uiPaint paint, float alpha, uiMeshMesh mesh) {
389+
public static PictureFlusher.CmdDraw strokeAlpha(PictureFlusher.RenderLayer layer, uiPaint paint, float strokeMult, uiMeshMesh mesh) {
390390
var mat = _strokeAlphaMat.getMaterial(paint.blendMode, layer.ignoreClip);
391-
_getShaderPassAndProps(layer, paint, mesh.matrix, alpha, out var pass, out var props);
391+
_getShaderPassAndProps(layer, paint, mesh.matrix, strokeMult, out var pass, out var props);
392392

393393
return PictureFlusher.CmdDraw.create(
394394
mesh: mesh,

0 commit comments

Comments
 (0)