StarKnobNoiseMaskLayerFixed.gif
Heres the fix:
MyKnobLaf.registerFunction("drawRotarySlider", function(g, obj)
{
var a = obj.area;
var range = obj.max - obj.min;
var stableSize = a[2] * (1.0 - 2.0 * 0.15);
var ox = a[0] + (a[2] - stableSize) / 2;
var oy = a[1] + (a[2] - stableSize) / 2;
var cx = ox + stableSize / 2;
var cy = oy + stableSize / 2;
var sw = stableSize / 200.0;
var startOffset = 2.5;
var totalSweep = 2.0 * startOffset;
var endOffset = -startOffset + totalSweep * (obj.value - obj.min) / range;
var cStarBody3Top = 0xffFF0000;
var cStarBody3Bot = 0xff00FBFF;
var cStarBody3Outline = 0xfa000000;
var starBody3Size = stableSize * 0.76;
var starBody3X = cx - starBody3Size * 0.5;
var starBody3Y = cy - starBody3Size * 0.5;
var starBody3Static = Content.createPath();
starBody3Static.addStar([0.5, 0.5], 3, 0.13, 0.5, 0);
starBody3Static.roundCorners(1);
var starBody3StaticBounds = starBody3Static.getBounds(starBody3Size).translated(starBody3X, starBody3Y);
var starBody3Star = Content.createPath();
starBody3Star.addStar([0.5, 0.5], 6, 0.05, 0.6, endOffset);
starBody3Star.roundCorners(1);
var starBody3RotBounds = starBody3Star.getBounds(starBody3Size).translated(starBody3X, starBody3Y);
// PASS 1: gradient fill
g.beginLayer(false);
g.setGradientFill([cStarBody3Top, cx, starBody3Y, cStarBody3Bot, cx, starBody3Y + starBody3Size, false]);
g.fillPath(starBody3Star, starBody3RotBounds);
g.endLayer();
// PASS 2: noise — use full obj.area so noise fills behind mask cleanly
g.beginLayer(false);
g.applyMask(starBody3Star, starBody3RotBounds, false);
g.rotate(endOffset, [cx, cy]);
g.addNoise({"alpha": 0.3, "monochromatic": true, "area": [a[0], a[1], a[2] * 2, a[3] * 2]});
g.rotate(-endOffset, [cx, cy]);
g.endLayer();
// PASS 3: outline
g.beginLayer(false);
g.setColour(cStarBody3Outline);
g.drawPath(starBody3Star, starBody3RotBounds, 3.06 * sw);
g.endLayer();
});