We must have been thinking much the same thing.
I spent another night on it last night after work because I was sure that I could lick this with some similar ideas.
I tried building against literallly every harfbuzz from 8.1.1 to 12.3,2 and each major release of freetype2 from 2020 until now, including the bundled harfbuzz in JUCE 8.0.12. Nothing, no change.
I tried build against various versions of JUCE from 7.0.12 (Apr '24) to now, and modifying the SCons config to deal with changes, and everything mostly built, with the exception of moving past 8.0.10, which caused a lot of problems. There are a bunch of breaking changes in weird, places, like lib_mid, juce::MidiInput::getDevices() isn’t a member function anymore, and you have to use juce::MidiInput::getAvailableDevices() which returns names, and not indexes, so you have to adjust code, and juce::MidiMessage mm((const unsigned char *)d.as_blob(),d.as_bloblen()) doesn’t work as it chokes on as_bloblen not being a declared function, but it is in the data_nb_t, so I gave up on x.11 and x.12, but went through knocking off configs and rebuilds semi automated as I binge watched some series in the background. Run build, watch a few mins of show while I wait, test, update, rebuild, go back to show, rinse repeat. LOL
No combo worked, even ones that worked before, yet they all worked on the 22.04 box.
Yet if I built the juce examples directly using jucer, all fonts present.
Bewildered, I eventually just added iostream to everthing, peppered everywhere liberally with std::out statements to watch each step in the paint process, from getting and loading fonts, to output.
Literally, the glyph string coming back from juce feeding text / fonts to harfbuzz was sending back empty glyphs, but ONLY in the EigenD context. This seems to be happening somewhere in an interaction between harfbuzz and libGL, but that still gets called in the EigenD context even if you force software rendering. Doesn’t if I build JUCE examples directly from the same JUCE version.
Yet, these all work fine on 22.0.4.
I am next to certain, that this is a mesa/GL bug of some kind at this point. Update logs show that a few weeks back, the AMD drivers were updated and that might be around the time the issue started AFAIK. As I mentioned, I only noticed it after the harfbuzz update, but it might have happened earlier.
Why that’s an issue only in EigenD, I honestly couldn’t say, but… brute forcing var dumps each step of the way in everything… harfbuzz is returning empty strings, and both native rendering (which I finally got working in a build) and harfbuzz call libGL/mesa under the hood, and it doesn’t appear either get anything back when I raw dump using std::out.
So, I setup a VM running the same version of ubuntu, but with no hardware passthrough to the GPU, so no amd drivers or GPU optimizations, but same OS, same basic Ubuntu 24.04 setup… and wouldn’t you know it, no fonts issues on EigenD.
So I am next to certain that there is something going on when running EigenD on my main rig, that somehow is interacting really oddly with mesa/GL. Something about how it builds seems to trigger a bug in mesa when rendering fonts.
A bit of research turned up that some other tools using JUCE were having the same issue on Arch linux, including Reaper and Bitwig VST hosts.
I think that this isn’t an EigenD issue per se, rather a bug in mesa/GL that somehow can be triggered when things are built a certain way.
As I said, if I pull the same 8.0.10 that’s in EigenD, and use Jucer or CMake, the fonts are fine, and if I run that same EigenD binary on another 24.04 Ubuntu that doesn’t have the AMD/Roc mesa, it runs fine, fonts all display.
When I enable GPU passthrough on my VM, and install old open source AMD drivers, and use vanilla mesa, it works there too. Just on the raw hardware with AMD ROc mesa… text all vanishes.
So, this weekend, I am going to see if I can roll back the mesa stuff on the rig safely and see what happens. It’s a bit tricky, as my main rig is also a multi-gpu setup for ML applications for work. But I know for sure that EigenD had no issues with font rendering a month back, and the binary didn’t change, but harfbuzz did, as did mesa/GL. I think something about EigenD just happens to trigger a bug in newer AMD / ROc drivers.
I also downloaded Reaper (don’t really like it, I’m a bitwig user mostly), and there are some serious weird font issues in the UI on this rig, not on other ubuntu machines. Only major difference… GPU and mesa/GL versions.
For the life of me tho… I can’t see why this would be different between building the examples in JUCE with jucer, vs an SCons build, or CMake build. Something too subtle for my dumb brain.
Anyway, that’s where I am at. I don’t think that this is really an EigenD issue at all. I think it has something to do with mesa/GL based on the std:out output and running under GDB. The EigenD build (and apparently reaper build) have trouble getting anything back that renders fonts in a graphics context if using AMD mesa extensions.
So, I am gonna try rolling back those drivers and dependent programs, and see if it fixes it. In the meantime, it works absolutely fine on my other Ubuntu boxes that DON’T have AMD GPUs or mesa.
Figured I’d update you. I’ve come to the conclusion that the issue lay outside of EigenD and it’s a JUCE / mesa/GL issue.