java-cef icon indicating copy to clipboard operation
java-cef copied to clipboard

Offscreen rendering support for MacOS arm64

Open GazimSoliev opened this issue 5 months ago • 6 comments

I can't use offscreen rendering on macos with arm64, get an error

GazimSoliev avatar Aug 24 '25 20:08 GazimSoliev

Exception in thread "main" java.lang.UnsatisfiedLinkError: /private/var/folders/nd/f4whl9t51blg_xrzkl6nffqc0000gn/T/jogamp_0000/file_cache/jln10734307428632924823/jln17397903611645811074/natives/macosx-universal/libgluegen_rt.dylib: dlopen(/private/var/folders/nd/f4whl9t51blg_xrzkl6nffqc0000gn/T/jogamp_0000/file_cache/jln10734307428632924823/jln17397903611645811074/natives/macosx-universal/libgluegen_rt.dylib, 0x0001): tried: '/private/var/folders/nd/f4whl9t51blg_xrzkl6nffqc0000gn/T/jogamp_0000/file_cache/jln10734307428632924823/jln17397903611645811074/natives/macosx-universal/libgluegen_rt.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/private/var/folders/nd/f4whl9t51blg_xrzkl6nffqc0000gn/T/jogamp_0000/file_cache/jln10734307428632924823/jln17397903611645811074/natives/macosx-universal/libgluegen_rt.dylib' (no such file), '/private/var/folders/nd/f4whl9t51blg_xrzkl6nffqc0000gn/T/jogamp_0000/file_cache/jln10734307428632924823/jln17397903611645811074/natives/macosx-universal/li at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2394) at java.base/java.lang.Runtime.load0(Runtime.java:755) at java.base/java.lang.System.load(System.java:1970) at com.jogamp.common.jvm.JNILibLoaderBase.loadLibraryInternal(JNILibLoaderBase.java:604) at com.jogamp.common.jvm.JNILibLoaderBase.access$000(JNILibLoaderBase.java:64) at com.jogamp.common.jvm.JNILibLoaderBase$DefaultAction.loadLibrary(JNILibLoaderBase.java:107) at com.jogamp.common.jvm.JNILibLoaderBase.loadLibrary(JNILibLoaderBase.java:488) at com.jogamp.common.os.DynamicLibraryBundle$GlueJNILibLoader.loadLibrary(DynamicLibraryBundle.java:427) at com.jogamp.common.os.Platform$1.run(Platform.java:321) at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) at com.jogamp.common.os.Platform.(Platform.java:290) at com.jogamp.opengl.GLProfile.(GLProfile.java:154) at org.cef.browser.CefBrowserOsr.createGLCanvas(CefBrowserOsr.java:146) at org.cef.browser.CefBrowserOsr.(CefBrowserOsr.java:104) at org.cef.browser.CefBrowserOsr.(CefBrowserOsr.java:95) at org.cef.browser.CefBrowserFactory.create(CefBrowserFactory.java:17) at org.cef.CefClient.createBrowser(CefClient.java:141) at org.cef.CefClient.createBrowser(CefClient.java:134) at example.jcef_compose_test.ComposableSingletons$MainKt$lambda$1430197010$1$2.invoke$lambda$1$lambda$0(main.kt:22) at androidx.compose.ui.viewinterop.TypedInteropViewHolder.(InteropView.skiko.kt:55) at androidx.compose.ui.viewinterop.SwingInteropViewHolder.(SwingInteropViewHolder.desktop.kt:49) at androidx.compose.ui.awt.SwingPanel_desktopKt.SwingPanel-euL9pac(SwingPanel.desktop.kt:79) at example.jcef_compose_test.ComposableSingletons$MainKt$lambda$1430197010$1$2.invoke(main.kt:20) at example.jcef_compose_test.ComposableSingletons$MainKt$lambda$1430197010$1$2.invoke(main.kt:19) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:130) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.ui.awt.ComposeWindow$setContent$5.invoke(ComposeWindow.desktop.kt:157) at androidx.compose.ui.awt.ComposeWindow$setContent$5.invoke(ComposeWindow.desktop.kt:156) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.ui.awt.WindowContentLayout_desktopKt.WindowContentLayout(WindowContentLayout.desktop.kt:108) at androidx.compose.ui.awt.ComposeWindowPanel$setContent$3$1.invoke(ComposeWindowPanel.desktop.kt:142) at androidx.compose.ui.awt.ComposeWindowPanel$setContent$3$1.invoke(ComposeWindowPanel.desktop.kt:141) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:384) at androidx.compose.ui.awt.ComposeWindowPanel$setContent$3.invoke(ComposeWindowPanel.desktop.kt:139) at androidx.compose.ui.awt.ComposeWindowPanel$setContent$3.invoke(ComposeWindowPanel.desktop.kt:138) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.ui.scene.ComposeContainer$setContent$1$1.invoke(ComposeContainer.desktop.kt:340) at androidx.compose.ui.scene.ComposeContainer$setContent$1$1.invoke(ComposeContainer.desktop.kt:339) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:364) at androidx.compose.ui.scene.ComposeContainer_desktopKt.ProvideContainerCompositionLocals(ComposeContainer.desktop.kt:532) at androidx.compose.ui.scene.ComposeContainer_desktopKt.access$ProvideContainerCompositionLocals(ComposeContainer.desktop.kt:1) at androidx.compose.ui.scene.ComposeContainer$setContent$1.invoke(ComposeContainer.desktop.kt:339) at androidx.compose.ui.scene.ComposeContainer$setContent$1.invoke(ComposeContainer.desktop.kt:338) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.ui.scene.ComposeSceneMediator$setContent$1$1$1$1.invoke(ComposeSceneMediator.desktop.kt:551) at androidx.compose.ui.scene.ComposeSceneMediator$setContent$1$1$1$1.invoke(ComposeSceneMediator.desktop.kt:550) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.ui.layout.OverlayLayout_skikoKt.OverlayLayout(OverlayLayout.skiko.kt:77) at androidx.compose.ui.viewinterop.InteropContainer_skikoKt.TrackInteropPlacementContainer(InteropContainer.skiko.kt:138) at androidx.compose.ui.viewinterop.SwingInteropContainer$invoke$1.invoke(SwingInteropContainer.desktop.kt:276) at androidx.compose.ui.viewinterop.SwingInteropContainer$invoke$1.invoke(SwingInteropContainer.desktop.kt:275) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:384) at androidx.compose.ui.viewinterop.SwingInteropContainer.invoke(SwingInteropContainer.desktop.kt:273) at androidx.compose.ui.scene.ComposeSceneMediator$setContent$1$1$1.invoke(ComposeSceneMediator.desktop.kt:550) at androidx.compose.ui.scene.ComposeSceneMediator$setContent$1$1$1.invoke(ComposeSceneMediator.desktop.kt:549) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:364) at androidx.compose.ui.scene.BaseComposeScene$setContent$1$2.invoke(BaseComposeScene.skiko.kt:147) at androidx.compose.ui.scene.BaseComposeScene$setContent$1$2.invoke(BaseComposeScene.skiko.kt:146) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:364) at androidx.compose.ui.platform.PlatformCompositionLocalsKt.ProvidePlatformCompositionLocals(PlatformCompositionLocals.kt:26) at androidx.compose.ui.platform.Wrapper_skikoKt$setContent$2$1$2.invoke(Wrapper.skiko.kt:51) at androidx.compose.ui.platform.Wrapper_skikoKt$setContent$2$1$2.invoke(Wrapper.skiko.kt:50) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:364) at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:216) at androidx.compose.ui.platform.Wrapper_skikoKt$setContent$2$1.invoke(Wrapper.skiko.kt:47) at androidx.compose.ui.platform.Wrapper_skikoKt$setContent$2$1.invoke(Wrapper.skiko.kt:46) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:364) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:401) at androidx.compose.ui.platform.Wrapper_skikoKt.provide(Wrapper.skiko.kt:63) at androidx.compose.ui.platform.Wrapper_skikoKt.access$provide(Wrapper.skiko.kt:1) at androidx.compose.ui.platform.Wrapper_skikoKt$setContent$2.invoke(Wrapper.skiko.kt:46) at androidx.compose.ui.platform.Wrapper_skikoKt$setContent$2.invoke(Wrapper.skiko.kt:45) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51) at androidx.compose.runtime.internal.Utils_jvmKt.invokeComposable(Utils.jvm.kt:27) at androidx.compose.runtime.ComposerImpl.doCompose-aFTiNEg(Composer.kt:3694) at androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(Composer.kt:3616) at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:792) at androidx.compose.runtime.Recomposer.composeInitial$runtime(Recomposer.kt:1137) at androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:677) at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:616) at androidx.compose.ui.platform.Wrapper_skikoKt.setContent(Wrapper.skiko.kt:45) at androidx.compose.ui.scene.CanvasLayersComposeSceneImpl.createComposition(CanvasLayersComposeScene.skiko.kt:208) at androidx.compose.ui.scene.BaseComposeScene.setContent(BaseComposeScene.skiko.kt:146) at androidx.compose.ui.scene.ComposeSceneMediator.setContent$lambda$12(ComposeSceneMediator.desktop.kt:549) at androidx.compose.ui.scene.ComposeSceneMediator.onComponentAttached(ComposeSceneMediator.desktop.kt:519) at androidx.compose.ui.scene.ComposeContainer.addNotify(ComposeContainer.desktop.kt:278) at androidx.compose.ui.awt.ComposeWindowPanel.addNotify(ComposeWindowPanel.desktop.kt:119) at java.desktop/java.awt.Container.addNotify(Container.java:2804) at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4839) at java.desktop/java.awt.Container.addNotify(Container.java:2804) at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4839) at java.desktop/java.awt.Container.addNotify(Container.java:2804) at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4839) at java.desktop/javax.swing.JRootPane.addNotify(JRootPane.java:721) at java.desktop/java.awt.Container.addNotify(Container.java:2804) at java.desktop/java.awt.Window.addNotify(Window.java:791) at java.desktop/java.awt.Frame.addNotify(Frame.java:495) at java.desktop/java.awt.Window.pack(Window.java:829) at androidx.compose.ui.util.Windows_desktopKt.setSizeImpl-6HolHcs(Windows.desktop.kt:115) at androidx.compose.ui.util.Windows_desktopKt.setSizeSafely-hQcJfNw(Windows.desktop.kt:54) at androidx.compose.ui.window.Window_desktopKt.Window$lambda$23$lambda$22(Window.desktop.kt:240) at androidx.compose.ui.window.Window_desktopKt.Window$lambda$40$lambda$39(Window.desktop.kt:621) at androidx.compose.ui.window.AwtWindow_desktopKt.AwtWindow$lambda$7$lambda$6(AwtWindow.desktop.kt:78) at androidx.compose.ui.util.UpdateEffect_desktopKt.UpdateEffect$lambda$8$lambda$7$performUpdate$lambda$4(UpdateEffect.desktop.kt:59) at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2496) at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:460) at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:244) at androidx.compose.ui.util.UpdateEffect_desktopKt.UpdateEffect$lambda$8$lambda$7$performUpdate(UpdateEffect.desktop.kt:55) at androidx.compose.ui.util.UpdateEffect_desktopKt.UpdateEffect$lambda$8$lambda$7(UpdateEffect.desktop.kt:64) at androidx.compose.runtime.DisposableEffectImpl.onRemembered(Effects.kt:83) at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberList(RememberEventDispatcher.kt:182) at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:174) at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1044) at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1067) at androidx.compose.runtime.Recomposer.composeInitial$runtime(Recomposer.kt:1164) at androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:677) at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:616) at androidx.compose.ui.window.Application_desktopKt$awaitApplication$2$1$2.invokeSuspend(Application.desktop.kt:221) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

GazimSoliev avatar Aug 24 '25 20:08 GazimSoliev

The jogamp binaries should be universal. Might be something wrong there.

magreenblatt avatar Oct 23 '25 17:10 magreenblatt

Any updates on this?

KlemenDEV avatar Nov 06 '25 19:11 KlemenDEV

Updating the binaries to the newest available version could be a good place to start.

magreenblatt avatar Nov 06 '25 19:11 magreenblatt

Any guidelines on how to do that (where to look at) or how to help with doing that?

KlemenDEV avatar Nov 06 '25 20:11 KlemenDEV

See https://bitbucket.org/chromiumembedded/java-cef/src/master/third_party/jogamp/README.jcef

Test first if it works for you locally.

magreenblatt avatar Nov 06 '25 20:11 magreenblatt

See https://github.com/jcefmaven/jcefmaven/issues/121 - this is now resolved in jcefmaven by updating the included jogl jar to the main release of jogl 2.4.0 instead of an rc build.

FriwiDev avatar Dec 03 '25 14:12 FriwiDev