a very cool viewer
  • C++ 92.3%
  • GLSL 3.4%
  • HTML 1.2%
  • C 0.8%
  • Python 0.8%
  • Other 1.4%
Find a file
backspace119 1c16dbd683 Build: GLIBCXX floor check, enforced in CI
make glibc-check now also reports the newest GLIBCXX symbol any packaged binary
needs against GLIBCXX_MAX (3.4.32, what the applejack builder produces). Local
builds with a newer GCC only warn; the release workflow passes GLIBCXX_STRICT=1
so a toolchain change can't silently raise the libstdc++ floor again.

Fixes #147

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0174Tm33mbjSLn77sP2ywvsm
2026-09-28 19:25:42 -04:00
.forgejo/workflows Build: GLIBCXX floor check, enforced in CI 2026-09-28 19:25:42 -04:00
.github Remove forced insertion of hippo in manually triggered builds 2025-09-28 05:29:33 -04:00
doc README: rebrand as a standalone fork; describe the GPU-driven Vulkan renderer and extra features 2026-09-27 00:29:26 -04:00
indra Build: strip the checkout path from binaries (-ffile-prefix-map) 2026-09-28 18:51:25 -04:00
research Lightbox: port Alchemy's photo/grading studio to the Vulkan renderer 2026-09-28 01:04:46 -04:00
scripts Slipstream 0.11.0: versioning + CI releases, rebrand from Alchemy 2026-09-27 16:34:01 -04:00
.clang-format More changes to Clang-Format to match the current coding standard (#2375) 2024-08-21 19:46:49 +03:00
.editorconfig Add editorconfig 2024-05-01 08:23:35 -07:00
.git-blame-ignore-revs add some more whitespace commits to .git-blame-ignore-revs 2024-09-18 20:04:24 -07:00
.gitattributes Remove unused vstool, files (#4500) 2025-08-15 19:57:55 -07:00
.gitignore Windows x64 build: cross-compile on Linux (clang-cl + xwin), package as zip 2026-09-27 08:52:20 -04:00
.pre-commit-config.yaml Fix up precommit 2025-09-01 03:24:45 -04:00
autobuild.xml Initial VHACD based llconvexdecomposition and autobuild package 2025-10-06 21:11:12 -04:00
build.sh Enable LTO in GHA builds 2025-09-27 16:40:27 -04:00
buildscripts_support_functions SL-18837: Get buildscripts_support_functions from sling-buildscripts 2023-06-28 16:58:32 -04:00
CONTRIBUTING.md Fix up various repo docs 2025-08-29 20:43:58 -04:00
LICENSE Renamed LICENSE.txt to follow naming scheme of other repos 2022-11-18 17:10:03 -05:00
LL_RENDER_REMOVAL.md LL render engine removed: clean pipeline is the only scene renderer 2026-07-07 04:00:37 -04:00
Makefile Build: GLIBCXX floor check, enforced in CI 2026-09-28 19:25:42 -04:00
README.md Point viewer links at git.slipstreamviewer.org 2026-09-27 18:45:47 -04:00

Slipstream Viewer

Slipstream

An experimental third-party viewer for Second Life, built around a new GPU-driven Vulkan renderer. It started as a fork of Alchemy Viewer, itself built on Linden Lab's viewer, and has since diverged a long way: the render pipeline has been rewritten, and features from other viewers (plus some of our own) are being folded in.

Status: early and experimental. Linux x86_64 and Windows x64 test builds. Expect bugs, and please report them on the issue tracker.

Why

Second Life viewers traditionally render the way they did in 2007: the CPU walks the scene every frame, binds state and issues draw calls one face at a time. In busy places (clubs, crowds, mainland) the CPU becomes the bottleneck long before the GPU does. This viewer moves that work onto the GPU.

On an RTX 5090, a busy scene that runs around 24 FPS in a conventional GL-based viewer runs around 90 FPS here; quieter scenes hit the monitor's refresh rate. Numbers vary a lot by scene and hardware; these are indicative, not a benchmark.

The render engine

The Vulkan renderer owns the scene on the GPU. The CPU's per-frame job shrinks to streaming changes and dispatching a handful of compute and indirect draws.

  • Persistent GPU scene. Every visible face lives in a persistent instance buffer (transform, material, bounds, flags) and a shared mega vertex/index buffer. Objects are uploaded when they change, not every frame.
  • Bindless materials and textures. One large descriptor table holds every resident texture, and materials index into it. There are no per-draw binds.
  • Compute culling + multi-draw indirect. A compute pass does frustum culling, LOD selection and bucket sorting (opaque, alpha-mask, alpha-blend, rigged, …) and writes indirect draw commands. The whole world draws in a few vkCmdDrawIndexedIndirectCount calls.
  • Depth pre-pass. A depth-only pass over the same indirect draws, then the lit pass with depth-equal and early fragment tests, so every pixel is shaded exactly once (measured overdraw 2.7× → 1.0×).
  • Clustered local lighting. Point lights and projectors are culled into screen-space clusters, so each pixel only evaluates the lights that reach it.
  • GPU skinning and animation. Skin palettes (and animation evaluation) are computed on the GPU, with a pre-skin compute pass feeding the rigged draws. Crowds of avatars no longer eat the CPU.
  • Streaming that follows visibility. Texture residency and quality follow what the GPU culler actually sees, with async uploads, a staging ring and a VRAM budget. Mesh decoding runs on worker threads.
  • Modern post-processing. HDR, tonemapping, glow, SSR, reflection probes, and SMAA / FXAA anti-aliasing.

The legacy OpenGL pipeline is retired in this fork.

Features you won't find in other viewers

  • Hardware ray tracing (RTX / RDNA2+). A ray-tracing foundation (BLAS per mesh LOD, a GPU-built TLAS, refit rigged avatars) with ray-traced projector shadows as the first consumer. They're exact, don't leak through walls, and keep up with moving stage lights. With the depth pre-pass they're often cheaper than shadow maps. Enable with RenderVKProjectorShadows = 2.
  • Projector (spot light) shadows done properly. A shadow-map path with a much larger budget than usual, correct near-plane handling, and caching for static lights.
  • Planar mirrors with occlusion-query gating: a mirror you can't see costs nothing.
  • Third-person shooter camera (View → Third-Person Shooter Camera). The mouse steers the camera around your avatar, WASD moves relative to the camera, and left-click fires like mouselook. Right-click or Esc releases.
  • Alchemy-style chat bar with optional nearby-chat toasts alongside chat bubbles.
  • Correct rendering of huge sim-surround objects (weather domes and the like), which are far-clipped away in some renderers.

Requirements

  • Linux x86_64, glibc ≥ 2.38, a CPU supporting x86-64-v2.
  • A GPU with a Vulkan 1.3 driver (NVIDIA proprietary, or Mesa RADV for AMD).
  • Ray-traced features need VK_KHR_ray_query: NVIDIA RTX 20-series or newer, AMD RX 6000 or newer. Without it, everything else still works and ray tracing switches off automatically.

Download

Test builds are published as releases. Each release lists a SHA-256 checksum. Linux: unpack the tarball and run ./slipstream from the extracted folder. Windows: unzip and run SlipstreamViewer.exe.

Building (Linux)

The repo includes a Makefile that wraps the autobuild/CMake flow:

make            # venv + deps + configure + build + package
make run        # launch the packaged viewer
make clean      # drop the build dir, keep caches

Run make help for targets and overrides (configuration, extra CMake flags). The first build downloads about 1 GB of prebuilt third-party libraries.

Useful settings

Setting What it does
RenderVKProjectorShadows 0 off, 1 shadow maps, 2 ray traced
RenderVKRayTracing 0 off, 1 auto (ray tracing when supported)
RenderVKDepthPrepass Depth pre-pass on or off (default on)
RenderVKGpuTimers Log per-pass GPU timings (for performance reports)
AlchemyTPSCamera Third-person shooter camera

Credits and license

Built on the work of Alchemy Viewer and Linden Lab's Second Life viewer, and includes RLVa. Source is licensed under the LGPL 2.1; see doc/LICENSE-source.txt and doc/LGPL-license.txt. Second Life and related marks belong to Linden Research, Inc. This project is not affiliated with or endorsed by Linden Lab or the Alchemy Viewer team.