diff --git a/src/nanovg.c b/src/nanovg.c index 0dbaa5d..4f7687b 100644 --- a/src/nanovg.c +++ b/src/nanovg.c @@ -322,15 +322,17 @@ static float nvg__hue(float h, float m1, float m2) unsigned int nvgHSLA(float h, float s, float l, unsigned char a) { + float m1, m2; + unsigned char r,g,b; h = nvg__modf(h, 1.0f); if (h < 0.0f) h += 1.0f; s = nvg__clampf(s, 0.0f, 1.0f); l = nvg__clampf(l, 0.0f, 1.0f); - float m2 = l <= 0.5f ? (l * (1 + s)) : (l + s - l * s); - float m1 = 2 * l - m2; - unsigned char r = (unsigned char)nvg__clampf(nvg__hue(h + 1.0f/3.0f, m1, m2) * 255.0f, 0, 255); - unsigned char g = (unsigned char)nvg__clampf(nvg__hue(h, m1, m2) * 255.0f, 0, 255); - unsigned char b = (unsigned char)nvg__clampf(nvg__hue(h - 1.0f/3.0f, m1, m2) * 255.0f, 0, 255); + m2 = l <= 0.5f ? (l * (1 + s)) : (l + s - l * s); + m1 = 2 * l - m2; + r = (unsigned char)nvg__clampf(nvg__hue(h + 1.0f/3.0f, m1, m2) * 255.0f, 0, 255); + g = (unsigned char)nvg__clampf(nvg__hue(h, m1, m2) * 255.0f, 0, 255); + b = (unsigned char)nvg__clampf(nvg__hue(h - 1.0f/3.0f, m1, m2) * 255.0f, 0, 255); return nvgRGBA(r,g,b,a); } diff --git a/src/nanovg_gl2.h b/src/nanovg_gl2.h index 05bbf21..ba0798b 100644 --- a/src/nanovg_gl2.h +++ b/src/nanovg_gl2.h @@ -533,12 +533,12 @@ static void glnvg__xformIdentity(float* t) static void glnvg__xformInverse(float* inv, float* t) { - double det = (double)t[0] * t[3] - (double)t[2] * t[1]; + double invdet, det = (double)t[0] * t[3] - (double)t[2] * t[1]; if (det > -1e-6 && det < 1e-6) { glnvg__xformIdentity(t); return; } - double invdet = 1.0 / det; + invdet = 1.0 / det; inv[0] = (float)(t[3] * invdet); inv[2] = (float)(-t[2] * invdet); inv[4] = (float)(((double)t[2] * t[5] - (double)t[3] * t[4]) * invdet); @@ -564,13 +564,14 @@ static int glnvg__setupPaint(struct GLNVGcontext* gl, struct NVGpaint* paint, st { float innerCol[4]; float outerCol[4]; - glnvg__toFloatColor(innerCol, paint->innerColor); - glnvg__toFloatColor(outerCol, paint->outerColor); struct GLNVGtexture* tex = NULL; float invxform[6], paintMat[9], scissorMat[9]; float scissorx = 0, scissory = 0; float scissorsx = 0, scissorsy = 0; + glnvg__toFloatColor(innerCol, paint->innerColor); + glnvg__toFloatColor(outerCol, paint->outerColor); + glnvg__xformInverse(invxform, paint->xform); glnvg__xformToMat3x3(paintMat, invxform); diff --git a/src/nanovg_gl3.h b/src/nanovg_gl3.h index 532cb4a..ca2abe8 100644 --- a/src/nanovg_gl3.h +++ b/src/nanovg_gl3.h @@ -539,12 +539,12 @@ static void glnvg__xformIdentity(float* t) static void glnvg__xformInverse(float* inv, float* t) { - double det = (double)t[0] * t[3] - (double)t[2] * t[1]; + double invdet, det = (double)t[0] * t[3] - (double)t[2] * t[1]; if (det > -1e-6 && det < 1e-6) { glnvg__xformIdentity(t); return; } - double invdet = 1.0 / det; + invdet = 1.0 / det; inv[0] = (float)(t[3] * invdet); inv[2] = (float)(-t[2] * invdet); inv[4] = (float)(((double)t[2] * t[5] - (double)t[3] * t[4]) * invdet); @@ -570,13 +570,14 @@ static int glnvg__setupPaint(struct GLNVGcontext* gl, struct NVGpaint* paint, st { float innerCol[4]; float outerCol[4]; - glnvg__toFloatColor(innerCol, paint->innerColor); - glnvg__toFloatColor(outerCol, paint->outerColor); struct GLNVGtexture* tex = NULL; float invxform[6], paintMat[9], scissorMat[9]; float scissorx = 0, scissory = 0; float scissorsx = 0, scissorsy = 0; + glnvg__toFloatColor(innerCol, paint->innerColor); + glnvg__toFloatColor(outerCol, paint->outerColor); + glnvg__xformInverse(invxform, paint->xform); glnvg__xformToMat3x3(paintMat, invxform); diff --git a/src/nanovg_gl3buf.h b/src/nanovg_gl3buf.h index fa82977..309ff31 100644 --- a/src/nanovg_gl3buf.h +++ b/src/nanovg_gl3buf.h @@ -531,12 +531,12 @@ static void glnvg__xformIdentity(float* t) static void glnvg__xformInverse(float* inv, float* t) { - double det = (double)t[0] * t[3] - (double)t[2] * t[1]; + double invdet, det = (double)t[0] * t[3] - (double)t[2] * t[1]; if (det > -1e-6 && det < 1e-6) { glnvg__xformIdentity(t); return; } - double invdet = 1.0 / det; + invdet = 1.0 / det; inv[0] = (float)(t[3] * invdet); inv[2] = (float)(-t[2] * invdet); inv[4] = (float)(((double)t[2] * t[5] - (double)t[3] * t[4]) * invdet);