I’ve found something rather interesting (at least to me). This is a hard one to show, for reasons I’ll get into below.
I’ve made a visualizer, the code is rock solid (let’s just assume this is true). It updates through a VBlankAttachment
. It has jitter. It is updating in perfect unison with the screen refresh, and moving 1 pixel, but it still has jitter.
If I open another plugin that has any kind of gpu workload, the issue is gone, and my visualiser looks as perfect as the code implies it will be. In fact, if any gpu workload spins up, the issue resolves. This is what makes it hard to show you. The moment I open OBS studio to screen record, it fixes the issue.
After some digging, I’ve narrowed this down to a windows power throttling setting. Basically, it sees one instance of my plugin as not enough work to warrant trying too hard, and it lets the VBlanks be a little loose.
The following has fixed the issue on my machine:
Windows 10/11’s “Power Throttling” explicitly limits background/low-load processes, including GPU tasks like Direct2D vsync. Disabling it forces consistent clocks.
-
Press Win + R, type regedit, and hit Enter (run as admin if prompted).
-
Navigate to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power.
-
Right-click Power > New > Key, name it PowerThrottling.
-
Right-click the new key > New > DWORD (32-bit) Value, name it PowerThrottlingOff.
-
Double-click it, set Value data to 1, and hit OK.
-
Restart your PC.
-
Revert: Delete the PowerThrottlingOff value or set to 0.
Warnings: This increases power draw and heat slightly—fine for desktops, monitor on laptops. It won’t overclock anything, just prevents downclocking.
Now, this isn’t a solution for user machines. So I ask: Is there anything that can be done from the JUCE side?