Skip to content

Serpentine3D 0.8.2

Choose a tag to compare

@chisomobanzi chisomobanzi released this 02 Sep 17:40
· 24 commits to main since this release

Fixed

The app starts on Wayland.

Reported from Manjaro/KDE on an RTX 3080: the welcome window came up
over a stream of QEGLPlatformContext: Failed to create context: 3009,
and New Model did nothing at all. Two assumptions in the startup path
only ever held on X11's GLX, and eight releases went out without either
being noticed.

The first is the surface format. Serpentine3D asked for an OpenGL 3.3
core profile without ever saying it meant desktop OpenGL rather than
OpenGL ES. On GLX there is nothing else it could have meant. On EGL,
which is what Wayland gives you, Qt takes the default and binds OpenGL
ES, which has no core profile, so every context request comes back
EGL_BAD_MATCH (3009): the viewport's, and the one Qt needs for its own
window backing store, which is why the errors started before anything
of ours had tried to draw.

The second is behind that one, and is why New Model did nothing rather
than showing an error. Qt and PyOpenGL each decide independently
whether to reach the driver through GLX or EGL, Qt by asking the driver
and PyOpenGL by reading the session type. When the two disagree,
PyOpenGL cannot see the context it has been handed, and the viewport's
first drawing call raises. Serpentine3D now asks Qt which binding it
ended up on and tells PyOpenGL, instead of letting both guess. That
covers the mirror case too, a Wayland session that falls back to
XWayland and GLX.

Installers

Linux AppImage, Windows installer, macOS .dmg (Apple silicon). The
macOS build is unsigned: right-click, Open the first time.