Plug-in UI doesn't work on certain versions of Ableton Live 12 (Windows)

Hi all, I’ve got a strange user report and I’m not really sure where to begin with debugging it, so I figured I’d ask on here to see if anybody has dealt with something similar.

Basically, on certain versions of Ableton 12 (Windows 11), my plug-ins UI seems pretty much totally borked. It seems to load inconsistently - in some cases, it loads as just as blank white screen:

In other cases, it seems like the depth/Z-index of elements isn’t respected, and they start displaying randomly on top of each other (in the following image, the license key entry dialog should be on top of all other elements, but the user is reporting that they can’t interact with it, and/or other things are rendering on top of the dialog):

Only one user is reporting this, and what’s stranger still is that they say it only seems to occur on one particular version of Live (12.0.20). It seems that the plug-in works fine in Live 12 Beta and other DAWs (Bitwig).

Any ideas what might be causing this? I tried to search for Live 12 bugs here on the forums, but the only things coming up seem to be non-UI stuff.

This is very unusual, I’m not sure what could be causing it.

The following info might help to track down the problem:

  • Do you have details of the user’s hardware, particularly screens and GPUs in use?
  • Have you tested Live 12.0.20 yourself, and if so, can you reproduce the issue? Do you have other users running Live 12.0.20 without issues? If you can’t repro the issue, then the problem might be caused by the user’s specific hardware or environment.
  • Which JUCE version was used to build this plugin? If JUCE 8, are you calling setCurrentRenderingEngine anywhere, or just using the default? If you’re not using the latest develop version of JUCE, can you still repro the issue after updating?
  • Is the license box a subcomponent of the main editor window, or is it a separate top-level window? Are the things rendering over the dialog top-level windows or subcomponents of the editor?

Ableton also has an “Auto-Scale” feature that is enabled by default and scales plugin UIs when DPI settings are higher than 100%:

This makes the UI blurry, but it works. Disabling it makes the UI sharper (like on other DAWs) but can cause rendering problems. IIRC you also need to reload the plugin to see the correct behavior after changing this setting.

Thanks for the ideas - info to follow…

Do you have details of the user’s hardware, particularly screens and GPUs in use?

HP Studio G8 i7, with 32GB Ram and high speed 2TB NVMe and an Nvidia graphics card
Windows 11 Pro Latest build 22631.4037
No scaled resolution settings in use.

Have you tested Live 12.0.20 yourself, and if so, can you reproduce the issue? Do you have other users running Live 12.0.20 without issues? If you can’t repro the issue, then the problem might be caused by the user’s specific hardware or environment.

I’m unable to repro. I have a Lenovo Thinkpad, i7 processor, 16GB RAM.
I’m running the same build of Windows 11 Pro as the user.

Furthermore, this is the only user report I’ve received of anything like this (sample size of a couple hundred users at least), so it seems particularly rare?

Which JUCE version was used to build this plugin? If JUCE 8, are you calling setCurrentRenderingEngine anywhere, or just using the default? If you’re not using the latest develop version of JUCE, can you still repro the issue after updating?

I’m using JUCE 8, and build/distributed this version about 3 weeks ago on the latest JUCE version. Not using setCurrentRenderingEngine anywhere. I guess I’ll try building on the latest JUCE version and shoot it over to the user to see if it helps.

Is the license box a subcomponent of the main editor window, or is it a separate top-level window? Are the things rendering over the dialog top-level windows or subcomponents of the editor?

Everything is a subcomponent of the main editor. The component relationship is Editor > FullUIComponent > LicenseDialog (I have the UI built in an intermediate component rather than the Editor directly, because I scale/scroll that component on iOS, but on macOS/Windows it’s just a thin wrapper).

The LicenseDialog is just a component who’s bounds match the entire window. When I display it, I set setAlwaysOnTop(true).

Is this related to the system resolution/scaling setting? If so, the user has no system level scaling going on. I tested at a variety of scaling settings.

Or do you mean UI scaling in Ableton specifically?

Thanks for the update. There’s another ongoing discussion where a user is seeing strange buffering/caching behaviour for the main plugin window here:

I don’t know if the underlying cause is the same, but there’s a possibility the issues are linked.

In the other post, it sounds like the plugin UI sometimes renders incorrectly while the plugin window is being moved around on the screen. Maybe you could ask your user whether the plugin UI changes at all when the plugin window is moved.

Ahh, that’s interesting.. I do have a Timer running, which updates some UI stuff (in this case, it checks if the user is authenticated and sets the license dialog component to visible if not), and then calls repaint(). So I’m not really changing what’s happening in the paint method, but I am changing which components are visible/invisible and then repainting… not sure if that would have the same effect?

In the other post, it sounds like the plugin UI sometimes renders incorrectly while the plugin window is being moved around on the screen. Maybe you could ask your user whether the plugin UI changes at all when the plugin window is moved.

No dice here. I have multiple screen recordings of the user showing the plug-in looking and behaving the same way after moving the plug-in window.

I’m sifting through the user report again, and I think a common theme is that there’s a mismatch between the dialog being presented as the topmost element, and actually being interactable as if it were the topmost element? I’m kind of spitballing though. The user reports the following issues (which happen inconsistently/randomly):

  1. The license dialog shows, but can’t be interacted with (I suspect that the dialog is visually the top element but not the functional top element). In the screenshot in the OP, you can see that the user managed to open a ComboBox’s menu despite the license dialog being shown on top of it.
  2. The license dialog doesn’t show, but the UI can’t be interacted with (the opposite of the above - I suspect that the dialog isn’t painted as the top element (or isn’t painted at all) but is treated as the top level element behaviorally)
  3. The entire plug-in is a blank white screen. I manually paint the background of the plug-in as a dark grey, so I suspect that this might be a version of #1, except that the dialog component isn’t rendering correctly.

On another note, I just built the plug-in using the latest version of JUCE and shot it over to the user. We’ll see if it makes any difference…

Just a quick follow-up, I built on the latest version of JUCE 8 and the user is still experiencing the same issue.

Hey @reuk, just wanted to let you know that the latest version of JUCE (8.0.2) seems to have fixed this issue. Not sure what the problem ended up being, but I saw in some other threads that yall were working on some other Direct2D issues. Well done! Thank you