milkdrop visualizer + plex + jellyfin + skin editor + cross builds#56
Merged
Conversation
phase 1 milkdrop integration: second SDL window with its own GL context, libprojectM driving it, X+Y on keyboard or controller toggles open/close. Makefile pkg-config detects libprojectM optionally (THESEUS_HAS_MILKDROP guard). projectM 3.x from brew segfaults inside Apple's GL emulator on Apple Silicon. brew has no 4.x package; next step is build-from- source. CAudioVisualizer m_source gate dropped (it required CAudioClip in TRANSPORT_PLAY which never happens on desktop where music flows through Mix_PlayMusic). Diagnostic confirmed PCM is reaching the render path; bug is downstream of pSurfx, not investigated further in this session.
Plex works! Jellys next.
- Dev tools move out of Tools into a Development top-level menu, gated by g_startupMode == 2 || g_extractedMode. - New Audio menu (Mute + master volume slider) and matching Settings -> Audio tab. Master volume scales SDL_mixer channels, music, and libmpv playback; persists to Configs/desktop.ini. - Mute removed from View; View is display-only now. - Media OSD chrome moved from foreground draw list to background so the menu-bar dropdown sits above it during playback.
Added live skin editing functionality.
- Vendored libprojectM 4.x as a submodule under theseus/third-party/projectm; a `projectm-deps` make target builds and installs it into a local prefix on first `make desktop`, so the build is self-contained instead of depending on a user-installed lib. - Ported the existing milkdrop window from the projectM 3.x C++ API to the 4.x C API (renderer, playlist, audio, render-to-FBO). - Render path: projectM draws to an offscreen FBO, glReadPixels back to a CPU buffer, bgfx::updateTexture2D into a bgfx texture exposed to the scene. The visible second window is hidden by default and only shown via "Show preview window" in the Configure panel. - Engine fix that benefits every dynamic texture, not just the visualizer: BgfxEnsureTextureUploaded now creates textures with BGFX_TEXTURE_BLIT_DST. Without it, Metal puts the texture in private GPU storage and silently drops updateTexture2D calls — any per-frame CPU-side texture mutation (audio visualizer, async-loaded covers, future dynamic content) froze on the first frame. Stride bug in CDynamicTexture::Update also fixed (writes now respect lr.Pitch instead of running off the end of a 352x352 region in a 512x512 dst). - "Use projectM visualizer" toggle in Settings -> Audio. When on, X+Y starts a headless projectM session; the C++ side overlays its bgfx texture full-screen on the dashboard with a 500ms fade-in. Overlay is suppressed while Settings / Configure projectM windows are open so the panels stay legible. - XAP-side coordination: new Math.projectMEnabled() built-in lets music2.xap's secret-key handler skip its own fullscreen viewpoint switch when projectM is taking over visually. Xbox builds get a stub constant so the engine still compiles. - Configure projectM panel (Settings -> Audio -> Configure projectM...): start / stop session, prev / next preset (GL context made current around projectm_playlist_set_position so shader compiles don't fail silently and black out the preview), 400-entry searchable preset dropdown, beat sensitivity + preset duration sliders, lock toggle that survives explicit nav, and a soundtrack/song picker that plays through DashAudio so projectM has real audio to react to. - Skin editor: Windows-cross PickFile() now uses GetOpenFileNameA from commdlg32 instead of the platform stub. - Drive-by: removed the Current Skin reread inside RereadLegacyFromDisk (was clobbering the Skin Editor's pick before SaveDesktopSettings wrote it out).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bundle of recent desktop features.
Milkdrop and stock visualizer: projectM 4.x as an in scene visualizer. Toggle in Settings, X+Y on a song to overlay it full screen with fade in. Configure panel has preset picker, sliders, soundtrack picker.
Plex/Jellyfin: PIN auth, library browse, libmpv playback. Quick Connect auth, browse, playback. New XIP scenes!
Skin editor: Live skin swap on desktop.
Menu restructure: Dev tools moved to a Development menu. New Audio menu and Settings tab with master volume that scales SDL, music, and libmpv. Mute moved out of View. Media OSD z order fixed so dropdowns sit above it.
Updated Cross builds: Win64 and Linux ARM64 paths now build libprojectM via cmake toolchain files. CI ships milkdrop on all four platforms.