From: Jean-Philippe Bruyère Date: Thu, 3 Mar 2022 09:16:14 +0000 (+0100) Subject: solve tight angle curve by settings a curved join when dotlineJoin; - if (ctx->lineJoin == VKVG_LINE_JOIN_MITER || isCurve){ + if (isCurve) { + if (dot < 0.8f) + join = VKVG_LINE_JOIN_ROUND; + else + join = VKVG_LINE_JOIN_MITER; + } + + if (join == VKVG_LINE_JOIN_MITER){ if (lh > str->lhMax) {//miter limit double x = (lh - str->lhMax) * cosf (halfAlpha); vec2 bisecPerp = vec2_mult_s (bisec_n, x); @@ -1051,7 +1059,7 @@ bool _build_vb_step (vkvg_context* ctx, float hw, stroke_context_t* str, bool is } _add_vertex(ctx, v); - if (ctx->lineJoin == VKVG_LINE_JOIN_BEVEL){ + if (join == VKVG_LINE_JOIN_BEVEL){ if (det<0){ _add_triangle_indices(ctx, idx, idx+2, idx+1); _add_triangle_indices(ctx, idx+2, idx+4, idx+0); @@ -1061,7 +1069,7 @@ bool _build_vb_step (vkvg_context* ctx, float hw, stroke_context_t* str, bool is _add_triangle_indices(ctx, idx+2, idx+3, idx+1); _add_triangle_indices(ctx, idx+1, idx+3, idx+4); } - }else if (ctx->lineJoin == VKVG_LINE_JOIN_ROUND){ + }else if (join == VKVG_LINE_JOIN_ROUND){ float step = M_PIF / hw; float a = acosf(vp.x); if (vp.y < 0)