fddb31e3ee
Context: Task 5 of oscope-sphere - add the SphereViz layer A skin and full ofApp wiring so the app produces a visual output. Approach: Build an icosphere (5 subdivisions) skinned by a scrolling 2-channel spectrogram texture uploaded each frame via ofFloatPixels. GLSL 150 shaders compute spherical UV from vertex direction so the texture wraps seamlessly; scroll is handled by a fract() offset in the fragment shader to avoid re-uploading geometry. Changes: - bin/data/shaders/sphere.vert: spherical UV projection from position - bin/data/shaders/sphere.frag: magma/viridis colormaps + scroll - src/SphereViz.h/.cpp: icosphere mesh, shader, texture management, pushSpectrogramColumn() wraps SpectrogramBuffer for dual-channel - src/ofApp.h: full member declarations (camera, analyzers, flags) - src/ofApp.cpp: setup/update/draw/HUD/keyPressed wired end-to-end; HantekDevice probed at startup, falls back to DemoSignal on failure Impact: app renders a rotating spectrogram globe in demo mode with orbit camera, colormap toggle, freeze, and per-layer visibility keys.