Dougal-s / Aether

An algorithmic reverb LV2 based on Cloudseed
https://dougal-s.github.io/Aether/
MIT License
168 stars 10 forks source link

OpenGL load #20

Closed jjYBdx4IL closed 2 years ago

jjYBdx4IL commented 2 years ago

First of all, ty for this great plugin, which I'll probably use as a reference implementation for LV2 plugins.

Question: have you tried any optimizations regarding UI rendering? Like buffering the background and knobs in a texture and only redrawing them when needed? I guess that's where most of the OpenGL load is coming from. Correct me if I'm wrong.

Another question: have you tried porting to Vulkan?

Dougal-s commented 2 years ago

Q1: At the moment, I've done very minimal optimization of the UI. At the moment, most of the ui load comes from the cpu, as it recalculates the positioning and styling of every element, every single frame. For example, disabling NanoVG rendering (by calling nvgCancel before nvgEndFrame) only improved the frame time by ~10% for me on Ubuntu 20.04.

Q2: I think I considered it back when I started the project but decided that using NanoVG and OpenGL would be simpler and less error-prone. Additionally, since I don't have access to a Mac, getting Vulkan to work using MoltenVK might be tricky? I've also considered using something like bgfx, but I've never gotten further than reading the documentation as it would be a lot of work and, as far as I'm aware, OpenGL works okay anyway. (Although I recently found out that the Raspberry Pi doesn't support OpenGL 3.0+)

P.S. I drafted this message last night before you closed the issue so I figured I may as well send it.

jjYBdx4IL commented 2 years ago

There is a metal backend for NanoVG. MoltenVK and NanoVG seems to be a particularly bad combination -- at least that's what I infer from what is being said about transcription performance over there: https://github.com/KhronosGroup/MoltenVK/issues/1533