Windows display scaling and Audirvana issue

When activate windows display scaling 125% in the windows display settings
My plugin is not showing correctly in the host Audirvana
Part of the plugin is missing.
this is the AudioPlugin example. (i have just change the “hello word” text))
The host is not showing the complete plugin. area in red is missing…

Anyone know how to solve?

edit:
I am on the development branch:
commit e618f68d4dcaed56803e6e4120ea450f15fb5a93 (HEAD)
Author: Tom Poole tom@juce.com
Date: Mon May 23 19:19:20 2022 +0100

Update all examples to use Visual Studio 2022 as the default Windows exporter

Nobody knows?

I’m facing a similar issue, see this thread:

Are you using OpenGL?

Any news on this?

I am not using OpenGL
Same problem with windows scaling and my plugin in the host Element Element Modular Plugin Host | VST Plugin Chainer and Effects Rack

JUCE 7

I have the same issue with Audirvana and JRiver Media Center. Not using OpenGL. Windows display scaling 125% Juce 6.1.6 VST3 Windows 10 and Windows 11. Here is what my plugin looks like in JRiver when first launched:

If I click on any of the check boxes in the left hand pane and then come back and click on HLConvolver, it now shows up correctly:

Also happens with 4K monitors.
I tried
void setScaleFactor(float) override { }
Which worked, and looks OK at 125% and 150% scaling, but on a 4K monitor looks like this:

Bump. Updated to JUCE 7.0.5, same issue. Is it possible that this host is the cause?
If not, are there other ways to workaround this?

Have you tested the same plugin in any other hosts? You could try testing it in the AudioPluginHost, or in REAPER, both of which should support dynamic scale factor changes on Windows.

If the plugin works properly in those hosts, but not in Audrivana/JRiver, then the problem is most likely not in the plugin code.

You could also try debugging the plugin in the problematic hosts, and check the size that is being requested by the plugin via resizeView (see resizeHostWindow in juce_VST3_wrapper.cpp. After the plugin requests a new size with resizeView, the host should call onSize with the size that it actually set (see the workflow diagrams). If the host doesn’t do that, then it may not support plugin-initiated resize.

3 Likes

Thank you @reuk ! Yes, the scaling works in other hosts. This was the issue for JRiver, it was not calling onSize and the developers have fixed it. However, still does not seem to work on 4K TV type screens.

The JRiver developer has asked, there is some documented info about a scaling call in the VST3 API that supposedly is only implemented for windows. I have no idea if that applies to your plugin or not.

queryInterface(Steinberg::IPlugViewContentScaleSupport::iid, (void**) &m_scaleInterface)

Thoughts?

The JRiver dev is also looking cross platform and has asked: I made a pretty big find on Mac with regards to VST3 plugin initialization. We weren’t making the call to do that. On Mac it’s a call to **bundleEntry** with a parameter. The parameter on Mac is a reference to the bundle. That fixes a bunch of plugins on Mac.

I’m trying to figure out how to implement that on linux as well but I can’t figure out what the parameter is on linux. The Juce code calls it a “nativeHandle” and the call to initialize is ModuleEntry. Is there a way for you to see what it’s looking for on linux for that parameter?

Any assistance appreciated!

JUCE implements the IPlugViewContentScaleSupport interface for VST3 editors. IIRC, the editor window will initially try to pick up the correct scale by querying the system DPI settings for the monitor/application. However, if the host calls setContentScaleFactor to set a specific scale, then JUCE will always use the host-provided scale from that point onwards. After receiving a setContentScaleFactor call that updates the editor bounds, JUCE will use the normal plugin-initiated resized flow documented here.

I’m trying to figure out how to implement that on linux as well but I can’t figure out what the parameter is on linux. The Juce code calls it a “nativeHandle” and the call to initialize is ModuleEntry. Is there a way for you to see what it’s looking for on linux for that parameter?

ModuleEntry takes a pointer to the shared library, which you’d probably get by calling dlopen on Linux. There are some more details here.

1 Like