meetup.20261005 - tixl3d/tixl GitHub Wiki

TiXL Meetup 2026-10-05 / The Linux & Vulkan Port, Time & Beat Sync, Projector Calibration

← Prev | Next β†’

A 4h23m TiXL developer meet-up: the first long look at the Linux port β€” SDL instead of WinForms, a thin facade carrying the old SharpDX calls to Vulkan 1.3, existing HLSL compiled through slang to SPIR-V, and 90 of 100 visual reference tests passing natively on Arch β€” then a community half on how bars and external clocks drive time, render-target economics, a photo-based projector calibration, and screen-space derivatives for anti-aliased field edges.

Introduction

πŸ†• new feature Β· πŸ› οΈ improvement Β· πŸ“˜ operator Β· πŸ“ walkthrough Β· 🧠 deep dive Β· 🍿 showcase Β· 🎯 planned Β· πŸ’¬ discussion Β· ⚠️ heads-up

Chapters

  • 0:00 πŸ’¬ Welcome: the release calendar and what v4.3 needs
  • 4:05 🎯 Why the free time goes into the Linux port
  • 9:06 ⚠️ AbletonLinkSync only reaches the branch it feeds
  • 14:33 πŸ“ A title card (Text, FastBlur, LinearGradient, Steps)
  • 17:48 πŸ“ Output setup: a central output onto a display
  • 22:12 πŸ“ Two patches splitting one monitor
  • 25:30 🎯 Panels in own windows, and a hot-standby machine
  • 33:12 🧠 Whiteboard: WinForms, SharpDX, ImGui and Bass
  • 37:25 πŸ†• SDL replaces WinForms; a facade onto Vulkan 1.3
  • 40:07 πŸ“ The player first: 90 of 100 visual tests pass
  • 44:37 πŸ†• HLSL survives: slang compiles it to SPIR-V
  • 46:55 🎯 No TiXL 5 break, and what slang's strictness costs
  • 52:06 πŸ†• The linux-port branch, tag 4.4 and build actions
  • 57:33 🍿 Live on Arch: dotnet build, 2s startup, tests
  • 1:05:58 ⚠️ NDI's license blocks packages; audio via PipeWire
  • 1:09:56 🍿 The ImGui UI, image export and drag-and-drop work
  • 1:12:12 πŸ’¬ How to help: crashes, shader errors, feature tests
  • 1:16:40 ⚠️ Wayland only, and SVG moving to Skia everywhere
  • 1:22:45 πŸ’¬ Why Linux: Windows fatigue, plus Pi and ARM
  • 1:35:21 🧠 Time is bars, not seconds β€” and external clocks
  • 1:38:24 πŸ“ A clock from RadialPoints, with AnimValue kicks
  • 1:42:42 πŸ“˜ Seconds not bars: SetTime and SetPlaybackTime
  • 1:54:47 🧠 No route node: portals and pull-based evaluation
  • 2:01:33 πŸ’¬ One voice per note, and C# delegates as the answer
  • 2:10:25 🎯 PBR roadmap: reflections, cube maps, variations
  • 2:13:49 🧠 Why the renderer stays forward: MSAA, ΓΌber-shaders
  • 2:19:00 🍿 A vibe-coded reroute point, Houdini-style
  • 2:30:21 ⚠️ A deleted central output leaves a ghost
  • 2:42:39 🧠 Focus-loss frame drops, and the performance graph
  • 2:55:30 πŸ› οΈ Untick update on unused outputs; keystoning
  • 3:02:22 πŸ“ Tracing a reference photo and straightening it
  • 3:08:13 🍿 Calibrating by dragging markers onto the wall
  • 3:17:00 πŸ› οΈ Render targets by the pixel; tone mapping late
  • 3:24:03 πŸ“ The texture-info overlay and render-target wins
  • 3:29:22 ⚠️ A 0Γ—0 source stretches DrawBillboards
  • 3:38:22 πŸ“˜ Layer2d snapping, RemapColor, publishing an input
  • 3:46:56 πŸ› οΈ "Paste values", and Ctrl+F as a history list
  • 3:53:13 πŸ“ CustomDrawMesh: flat and lit mixed by a dot product
  • 4:05:24 πŸ“ A gradient from field distance, and alpha cutoff
  • 4:09:34 🧠 Screen-space derivatives: ddx, ddy and fwidth
  • 4:14:00 🍿 fwidth as a smooth-step width β€” free anti-aliasing
  • 4:22:23 πŸ’¬ Wrap-up: test Linux, test the output system