v0.54.0: Kaleidostrobe at 60 fps, its big window on the GPU, two-tone gray mode, sync can go sooner
The plugin still steps at its own 25 fps, frame for frame; between frames the turn continues, textures crossfade, and the cone follows a preview of the newest audio, so beats land a refresh sooner. The big window replays the original's GL calls through OpenGL (QPainter took ~40 ms a frame at 1080p); without GL it falls back. Gray mode is only the gray-mode colour on the panel background. The sync slider goes to -50 ms (sooner).
This commit is contained in:
@@ -279,10 +279,24 @@ persistence) → GUI (Qt widgets that read the manager and connect to its signal
|
||||
were Apple SDK leftovers its code never read, so the style has none. It
|
||||
reads only iTunes' **spectrum** bytes (never the waveform); iTunes' byte
|
||||
scale was never published, so `itunes_spectrum` (√magnitude, 43 Hz bins)
|
||||
is the one calibrated stand-in. Painting: each GL triangle is planar, so
|
||||
it is drawn in texture space through a projective **world** transform
|
||||
(Qt mis-draws a strongly projective *brush* transform); the top cone is
|
||||
always nearer, so painter's order is the depth test.
|
||||
is the one calibrated stand-in. **On screen it is 60 fps anyway**
|
||||
(Round 85): between the 25 Hz frames `_compose` turns the cones by a
|
||||
fraction of a frame, crossfades the textures, and takes height/depth from
|
||||
`engine.preview` — the plugin's analysis run on a throwaway copy with the
|
||||
newest audio, so a beat pumps the cone one refresh later, not one 40 ms
|
||||
tick later. `preview` must never touch real state (a golden test
|
||||
interleaves it). Painting: the panel uses QPainter — each GL triangle is
|
||||
planar, drawn in texture space through a projective **world** transform
|
||||
(Qt mis-draws a strongly projective *brush* transform). The **big window
|
||||
replays the original's GL calls** (`paint_gl` in a `gui/kaleido_gl.py`
|
||||
QOpenGLWidget, GL 2.1 fixed-function via QOpenGLVersionFunctionsFactory):
|
||||
QPainter cost ~40 ms a frame at 1920×1080, which is what stuttered. No GL
|
||||
→ `unavailable` → the window paints with QPainter again. Gray mode is
|
||||
strictly two-tone (gray-mode colour on the panel background, by HSV
|
||||
value — luma calls the saturated palettes dark). The sync slider now goes
|
||||
below 0 ("sooner"), borrowing audio decoded but not yet heard — only
|
||||
~0–30 ms of it exists, hence the −50 ms floor. The top cone is always
|
||||
nearer, so painter's order is the depth test.
|
||||
`tests/kaleidostrobe_golden.npz` was recorded from the emulated original
|
||||
and `test_round84` holds the port to it byte for byte.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user