As written
in the documentation, OpenSpace uses OpenGL double precision floating point operations extensively, and Apple Silicon does not have hardware support for it. Checking if it will downgrade gracefully to software rendering, found that OpenSpace would just crash, with Claude.ai telling me that the crash report
Crashed Thread: 0 CrBrowserMain Dispatch queue: com.apple.main-thread
Thread 0 Crashed:: CrBrowserMain Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x190856388 __pthread_kill + 8
1 libsystem_pthread.dylib 0x19088f848 pthread_kill + 296
2 libsystem_c.dylib 0x1907989e4 abort + 124
3 libGLProgrammability.dylib 0x1f0ea63e4 glpPrimitiveTypeGetScalarType + 136
4 libGLProgrammability.dylib 0x1f0e8af20 glpLLVMLoadVector + 120
5 libGLProgrammability.dylib 0x1f0e7c8f0 glpLLVMCGLValue + 1160
6 libGLProgrammability.dylib 0x1f0e771b0 glpLLVMCGAssign + 112
7 libGLProgrammability.dylib 0x1f0e7788c glpLLVMCGCommaExpr + 268
8 libGLProgrammability.dylib 0x1f0e7788c glpLLVMCGCommaExpr + 268
9 libGLProgrammability.dylib 0x1f0e771b0 glpLLVMCGAssign + 112
10 libGLProgrammability.dylib 0x1f0e7788c glpLLVMCGCommaExpr + 268
11 libGLProgrammability.dylib 0x1f0e7788c glpLLVMCGCommaExpr + 268
12 libGLProgrammability.dylib 0x1f0e771b0 glpLLVMCGAssign + 112
13 libGLProgrammability.dylib 0x1f0e7788c glpLLVMCGCommaExpr + 268
14 libGLProgrammability.dylib 0x1f0e7b5f8 glpLLVMCGBlock + 516
15 libGLProgrammability.dylib 0x1f0e722c8 glpLLVMCGNode + 632
16 libGLProgrammability.dylib 0x1f0e7b234 glpLLVMCGFunctionDefinition + 2888
17 libGLProgrammability.dylib 0x1f0e70f30 glpLLVMCGTopLevel + 1444
18 libGLProgrammability.dylib 0x1f0e985f8 glpLinkProgram + 10092
19 libGLProgrammability.dylib 0x1f0eb1ea0 ShLink + 208
20 GLEngine 0x1f104a3b8 gleLinkProgram + 1140
21 GLEngine 0x1f0fc6350 glLinkProgramARB_Exec + 180
22 OpenSpace 0x1021f8aa4 glbinding::BasicCallHelper<void, unsigned int>::call(glbinding::Function<void, unsigned int> const*, unsigned int&&) + 44
23 OpenSpace 0x1021f87d0 glbinding::Function<void, unsigned int>::call(unsigned int&) const + 184
24 OpenSpace 0x1021f3a24 glbinding::Function<void, unsigned int>::operator()(unsigned int&) const + 32
25 OpenSpace 0x1023470c8 gl::glLinkProgram(unsigned int) + 32
26 OpenSpace 0x101e5dc2c ghoul::opengl::ProgramObject::linkProgramObject() + 44
27 OpenSpace 0x101e5e668 ghoul::opengl::ProgramObject::Build(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::__fs::filesystem::path const&, std::__1::__fs::filesystem::path const&, ghoul::Dictionary const&) + 1456
28 OpenSpace 0x100a5dbac openspace::RenderEngine::buildRenderProgram(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::__fs::filesystem::path const&, std::__1::__fs::filesystem::path const&, ghoul::Dictionary) + 316
29 OpenSpace 0x1016ce084 openspace::globebrowsing::RenderableGlobe::recompileShaders() + 6156
30 OpenSpace 0x1016cc82c openspace::globebrowsing::RenderableGlobe::initializeGL() + 208
31 OpenSpace 0x100b47b88 openspace::SceneGraphNode::initializeGL() + 584
32 OpenSpace 0x100ae4bb0 openspace::Scene::update(openspace::UpdateData const&) + 132
33 OpenSpace 0x100a5a6d0 openspace::RenderEngine::updateScene() + 196
34 OpenSpace 0x1007eb428 openspace::OpenSpaceEngine::loadAssets() + 972
35 OpenSpace 0x1007ed234 openspace::OpenSpaceEngine::preSynchronization() + 156
36 OpenSpace 0x1004303ac (anonymous namespace)::mainPreSyncFunc() + 80
37 OpenSpace 0x100ce8b90 sgct::Engine::exec() + 288
38 OpenSpace 0x10042d170 main + 14684
39 dyld 0x1904eeb98 start + 6076
indicates that
The crash is happening in Apple's OpenGL shader compiler (libGLProgrammability.dylib) when OpenSpace tries to compile shaders for the globe rendering. Look at the stack:
Frame 26-29: OpenSpace is compiling shaders for RenderableGlobe
Frame 19-21: Apple's OpenGL implementation tries to link the shader program
Frame 3: The shader compiler encounters something it can't handle and aborts
Now, this could possibly be due to some filesystem issues, restrictions due to running OpenSpace from command-line from a sub-folder of my home folder instead of Applications folder, but I got a similar crash when running OpenSpace inside
UTM on Ubuntu 24.04 (using the
daily build deb file yesterday) if I enable hardware acceleration.
Unfortunately, mesa on MacOS doesn't seem to enable software rendering -
brew install mesa
# Set environment variables to use Mesa's software renderer
export LIBGL_ALWAYS_SOFTWARE=1
export GALLIUM_DRIVER=llvmpipe
# Run OpenSpace
./OpenSpace.app/Contents/MacOS/OpenSpace But the same crash is observed. Claude says,
Unfortunately, Mesa on macOS is limited. The Homebrew Mesa package primarily provides: OSMesa (off-screen rendering) and some utilities
But it won't override Apple's OpenGL framework the way it does on Linux. macOS applications are hardcoded to use /System/Library/Frameworks/OpenGL.framework.
Then, tried disabling hardware acceleration and running the same OpenSpace deb file on Ubuntu 24.04, and that works. Around 8 fps, and the frame-rate does not seem to improve much beyond 20 fps or so even if we use something like
onlyEarth.profile or loading individual assets to the empty profile, etc. But this could be still useful for offline work, validating single-precision builds and so on.
And so now to single-precision builds - I'll try to build for Mac Apple Silicon and see what happens.