diff --git a/src/renderer/gl_engine/tvgGlCommon.h b/src/renderer/gl_engine/tvgGlCommon.h index 0ae4267e..fbc066a5 100644 --- a/src/renderer/gl_engine/tvgGlCommon.h +++ b/src/renderer/gl_engine/tvgGlCommon.h @@ -52,6 +52,11 @@ } \ } while(0) +static inline float getScaleFactor(const Matrix& m) +{ + return sqrtf(m.e11 * m.e11 + m.e21 * m.e21); +} + enum class GlStencilMode { None, FillWinding, diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index 429a2dc3..dc976c41 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -168,7 +168,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() * sdata.geometry->getTransformMatrix().e11; + float strokeWidth = sdata.rshape->strokeWidth() * getScaleFactor(sdata.geometry->getTransformMatrix()); 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 20bdc94b..eb4462aa 100644 --- a/src/renderer/gl_engine/tvgGlTessellator.cpp +++ b/src/renderer/gl_engine/tvgGlTessellator.cpp @@ -1651,7 +1651,7 @@ void Stroker::stroke(const RenderShape *rshape) mStrokeWidth = rshape->strokeWidth(); if (isinf(mMatrix.e11)) { - auto strokeWidth = rshape->strokeWidth() * mMatrix.e11; + auto strokeWidth = rshape->strokeWidth() * getScaleFactor(mMatrix); if (strokeWidth <= MIN_GL_STROKE_WIDTH) strokeWidth = MIN_GL_STROKE_WIDTH; mStrokeWidth = strokeWidth / mMatrix.e11; }