diff --git a/src/renderer/gl_engine/tvgGlCommon.h b/src/renderer/gl_engine/tvgGlCommon.h index ad6d172e..337ad69d 100644 --- a/src/renderer/gl_engine/tvgGlCommon.h +++ b/src/renderer/gl_engine/tvgGlCommon.h @@ -57,6 +57,11 @@ } while(0) #endif +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 bb06b4f1..826ce738 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -162,7 +162,7 @@ void GlRenderer::drawPrimitive(GlShape& sdata, const RenderColor& c, RenderUpdat auto a = MULTIPLY(c.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 014bb91f..8cb69b3d 100644 --- a/src/renderer/gl_engine/tvgGlTessellator.cpp +++ b/src/renderer/gl_engine/tvgGlTessellator.cpp @@ -1534,7 +1534,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; }