[QUOTE=johne53;1292725]…open-source DAW called Mixbus … supports plugins.
Many of our users have complained about very high CPU usage when launching certain plugins.
1 x instance of the plugin will make that shoot up to 30%.
A 2nd instance increases it to 50% and so on.
After 2 months of testing we’ve finally realised that the common factor (for all the affected plugins) is that they all use OpenGL.[/QUOTE]
That’s an interesting data point. But now you need to look deeper for correlations beyond that.
And yet I thought the whole point of OpenGL was to use hardware acceleration (and therefore minimize CPU usage)?
OpenGL is just an API. By itself, it doesn’t do anything and can’t cause performance problems. It’s a spec.
Graphics drivers (from the GPU vendors, CPU vendors, and 3rd parties) develop graphics drivers that implement that spec. Users develop applications that sit on top of those drivers to make use of GPUs and CPUs via the graphics driver (yes, CPUs; some graphics drivers run on the CPU). These drivers, the apps that sit on top of them, and the underlying hardware are what determine the performance, good or bad.
Does OpenGL simply not work on Windows?
Some vendors’ graphics drivers and GPUs work exceptionally well on Windows. Performance problems can sometimes be driver related. However…
It’s more common for graphics performance problems to come from inefficient usage of the OpenGL API from the application (the plugins in this case).
Or could the plugin devs be misusing it somehow (or misunderstanding it maybe)?
This seems more likely. In any case, what you’re looking for is correlations between specific graphics drivers and/or app plugins with the performance problem you’re seeing. Then you can dig deeper and see why that correlation exists.
You can go a long way toward identifying these correlations by capturing, in addition to the plugin names and versions, the graphics driver names and versions and the underlying GPU or CPU being used. For information on how to do this, see the GL_RENDERER, GL_VENDOR, and GL_VERSION string queries here:
After creating a GL context, you can make these queries and log the results. To get a sample of what some of the GL_RENDERER and GL_VERSION strings look like, see this link:
[li]gpuinfo.org : OpenGL Reports [/li][/ul]