VL.CEF is causing exception on startup of exported executable

VL.CEF version 0.3.2, vvvv version 2021.4.11-1053.

Happens as soon as the package is referenced, doesn’t even have to be in use.

Doesn’t happen when the patch is running in the editor.

After clicking Continue, the executable window opens but Skia rendering is completly broken and nothing shows up.

Unfortunately I can’t reproduce the issue with a simpler patch.

System.Exception: Failed to get EGL display
   at VL.Skia.Egl.EglDisplay.<GetPlatformDefault>g__TryCreate|2_0(Int32[] displayAttributes)
   at VL.Skia.Egl.EglDisplay.GetPlatformDefault()
   at VL.Skia.RenderContext.ForCurrentThread()
   at VL.Skia.SkiaGLControl.OnHandleCreated(EventArgs e)
   at System.Windows.Forms.Control.WmCreate(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.UserControl.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Ok I think I found the culprit. When VL.CEF is referenced, non-Angle? versions of libEGL.dll and libGLESv2.dll get copied to the output.

image

image

image

image

When replacing those two manually the crash is gone.

Unfortunately while fixing the crash, CEF is somewhat broken. I guess it requires an update / fix.
Since the used CefGlue version (75.1.0.0) seems to be about 3 years old maybe it could be updated too?

Attempted to update it myself to CEF 91.1.6 using:

Had to comment out some (“no suitable method found to override” / “does not contain a definition for”) to get it to compile. The nodes run without errors but websites never finish loading.

My changes can be found here:

Didn’t try even newer CEF versions, I guess they have even more breaking changes.

Interesting. Thanks for looking into it. Wasn’t aware of that dll conflict. I’m guessing it’s the browser executable and its dependencies colliding with ours. Will need to change the packaging so that the browser executable ends up in its own subfolder.

And yes, as long as the hardware acceleration is not brought back it doesn’t make much sense to update at all currently. Already started to wonder whether we should abandon CEF in favor of WebView2 (= Edge = Chromium = kinda the same). Since the node its invention this was always an issue that we were lacking behind the current browser versions. The benefits of WebView2 are, that it uses the Edge browser maintained by the Windows Update system = should stay up-to-date. But never looked into it, also no idea whether they have hardware acceleration.

Update: Just found out that nuget flattens everything inside the runtime/{platform}/* folder we’re currently using to deploy the browser executable (Add warning about flattening behavior to "architecture-specific folders" · Issue #2322 · NuGet/docs.microsoft.com-nuget · GitHub) - that’s why in the end the dlls from a supposedly subfolder (swiftshaders) end up top-level overwriting the ANGLE dlls :(
Will have to find a different solution, probably with a custom targets file in buildTransitive.

CEF in vvvv currently doesn’t use hardware acceleration or newer CEF versions don’t provide it in general?

Aside from the export bug: We’d like to use an RCP interface rendered/used in vvvv itself via CEF. The current version has some bugs and I was hoping an update to a newer version (in a not so distant future) might solve that.

Edit: libEGL and libGLSv2 that come with 91.1.6 use ANGLE

Just fixed the dll conflict but unable to upload the package :( will try later

2 Likes

Concerning WebView2:

1 Like

Thanks for digging into it. Looks like we have to be patient a while longer. And regarding your question: newer CEF versions don’t provide hardware acceleration (= hand you over the rendering in a shared texture). It’s also mentioned in the 2nd issue you linked above. Well at least it’s not possible with the official builds.

Oh and the new packages are up (= 0.3.3). Hopefully they work for you.

OBS seems to have a modified version that supports texture sharing, could this be used in the meantime?

Also I came accross an old acquaintance here:

Hehe, old acquaintance is good. And yes, I remember on last Link talking with him about it. Building CEF from source with that patch applied (that particular git commit message you linked is quite funny) is an option, but for sure also one of those rabbit holes which could take quite a while to get out of.
At least we have currently no plans of jumping into it. The agreement last time we discussed it internally, was to wait it out until the feature comes back in the official builds.