diff --git a/src/renderer/gl_engine/tvgGlGeometry.h b/src/renderer/gl_engine/tvgGlGeometry.h index 0e3cfea0..ad1ea85b 100644 --- a/src/renderer/gl_engine/tvgGlGeometry.h +++ b/src/renderer/gl_engine/tvgGlGeometry.h @@ -27,7 +27,7 @@ #include "tvgGlCommon.h" #include "tvgMath.h" -#define MIN_GL_STROKE_WIDTH 0.5f +#define MIN_GL_STROKE_WIDTH 1.0f #define MVP_MATRIX(w, h) \ float mvp[4*4] = { \ diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index 1a30a018..63e64ab7 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -140,7 +140,7 @@ void GlRenderer::drawPrimitive(GlShape& sdata, uint8_t r, uint8_t g, uint8_t b, a = MULTIPLY(a, sdata.opacity); if (flag & RenderUpdateFlag::Stroke) { - float strokeWidth = sdata.rshape->strokeWidth(); + float strokeWidth = sdata.rshape->strokeWidth() * sdata.geometry->getTransformMatrix().e11; if (strokeWidth < MIN_GL_STROKE_WIDTH) { float alpha = strokeWidth / MIN_GL_STROKE_WIDTH; a = MULTIPLY(a, static_cast(alpha * 255)); diff --git a/src/renderer/gl_engine/tvgGlTessellator.cpp b/src/renderer/gl_engine/tvgGlTessellator.cpp index 4b6bc81a..6b877a19 100644 --- a/src/renderer/gl_engine/tvgGlTessellator.cpp +++ b/src/renderer/gl_engine/tvgGlTessellator.cpp @@ -1645,11 +1645,19 @@ Stroker::Stroker(Array *points, Array *indices, const Matrix& m void Stroker::stroke(const RenderShape *rshape) { - mMiterLimit = rshape->strokeMiterlimit() * 2.f; - mStrokeWidth = std::max(mStrokeWidth, rshape->strokeWidth()); + mMiterLimit = rshape->strokeMiterlimit(); mStrokeCap = rshape->strokeCap(); mStrokeJoin = rshape->strokeJoin(); + mStrokeWidth = rshape->strokeWidth(); + if (isinf(mMatrix.e11)) { + float strokeWidth = rshape->strokeWidth() * mMatrix.e11; + + if (strokeWidth <= MIN_GL_STROKE_WIDTH) strokeWidth = MIN_GL_STROKE_WIDTH; + + mStrokeWidth = strokeWidth / mMatrix.e11; + } + auto cmds = rshape->path.cmds.data; auto cmdCnt = rshape->path.cmds.count; @@ -1955,7 +1963,7 @@ void Stroker::strokeMiter(const GlPoint &prev, const GlPoint &curr, const GlPoin auto pe = out * k; - if (detail::_pointLength(pe) >= mMiterLimit) { + if (detail::_pointLength(pe) >= mMiterLimit * strokeRadius()) { this->strokeBevel(prev, curr, center); return; }