Skip to content

updates#11

Open
ford442 wants to merge 26 commits intoford442:jules-1-14-26from
projectM-visualizer:master
Open

updates#11
ford442 wants to merge 26 commits intoford442:jules-1-14-26from
projectM-visualizer:master

Conversation

@ford442
Copy link
Copy Markdown
Owner

@ford442 ford442 commented Apr 3, 2026

No description provided.

kblaschke and others added 24 commits January 26, 2026 23:04
Adds ENABLE_MACOS_FRAMEWORK cmake option to build projectM-4.framework
and projectM-4-playlist.framework bundles instead of plain dylibs.
Only available on macOS with shared library builds.

The frameworks include all public headers in the Headers/ directory
and use standard macOS framework versioning (Version A).

Fixes #924
- Use absolute paths for headers exported to parent scope
- Include C++ headers in framework when ENABLE_CXX_INTERFACE is on
Adds a callback that allows applications to provide textures from
non-filesystem sources like archives, network, or procedurally
generated content. The callback receives the texture name and can
return either raw pixel data or an existing OpenGL texture ID.

Changes:
- Add SetTextureLoadCallback API for custom texture loading
- Add texture ownership tracking to prevent deletion of app-provided textures
- Update texture creation to use stb_image instead of SOIL
- Add validation and error logging for callback-provided textures

Fixes #870

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Adds projectm_playlist_set_preset_load_event_callback() to allow applications
to handle preset loading themselves. This enables loading presets from:
- Archives (ZIP files)
- Network sources (HTTP)
- Custom storage solutions
- Asynchronous loading patterns

When the callback is set and returns true, the playlist library skips its
default filesystem-based loading. If the callback returns false or isn't set,
the default behavior is used.

Fixes #946
Adds projectm_set_preset_start_clean() and projectm_get_preset_start_clean()
functions to control whether new presets start with a black canvas or inherit
the previous preset's last frame.

Default behavior remains unchanged (copy previous frame), but applications
can now opt-in to clean starts by setting this flag to true.

Fixes #298
Crashes in some rare cases, e.g. "martin - test random mosscity.milk"
* Fix macOS framework build to properly include headers

The previous implementation using CMake's built-in FRAMEWORK property
had two issues:
1. Headers were not copied into the framework at all
2. PUBLIC_HEADER flattens directory structure, breaking C++ interface

This replaces the CMake FRAMEWORK support with a custom MacOSFramework
cmake module that:
- Builds proper framework bundles from scratch
- Preserves header directory hierarchy (Audio/, Renderer/ subdirs)
- Creates correct symlink structure (Versions/A, Current, etc.)
- Generates Info.plist with bundle metadata

Also adds CI test script (scripts/test-macos-framework.sh) that validates:
- Framework directory structure
- Header completeness
- Linkability (compile and link test program)

Fixes the empty framework issue reported after ef00cfc.

* Fix review issues in macOS framework build

- Add missing Renderer/TextureTypes.hpp to C++ framework headers
- Skip pkg-config generation for playlist in framework mode
- Use stored framework path property for install instead of TARGET_FILE_DIR
- Show compiler errors on linkability test failure instead of suppressing
- Fix comment about framework output location

* Add framework CI jobs and harden test script

New CI job matrix (build-framework):
- Tests framework builds on both arm64 and x86_64
- Tests with and without C++ interface
- Runs strict validation after build AND after install
- Verifies installed frameworks match build output

Test script improvements:
- Exhaustive header lists (all C API + all C++ headers)
- Exact header count validation (catches stale/unexpected files)
- Strict mode (STRICT=1) where SKIPs become FAILs
- Info.plist CFBundleExecutable validation
- Symlink target verification (Current, Headers, Resources)
- Mach-O dylib binary type check
- dylib install name validation
- Flexible framework search across build tree and install prefix
- Test pass counter in summary

---------

Co-authored-by: Mischa <[email protected]>
…, glx 1.4, loader=true, alias=true, extensions=none)
replace OpenGL depencencies with GLAD
add GL resolver, GL probe, GLAD loader
remove GLEW
* Fixed heading format for "Windows" title from end-user applications
@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

struktured and others added 2 commits April 11, 2026 01:06
The circular audio buffer was protected only by a std::atomic on the
write index, which is insufficient: a multi-sample AddToBuffer() call
can be interrupted mid-write by UpdateFrameAudioData() reading the
buffer, producing torn waveform data.

Replace the atomic index with a std::mutex that protects both the
buffer writes in AddToBuffer() and the bulk copy in
UpdateFrameAudioData(). The lock is held only for the buffer access,
not for the downstream spectrum analysis.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
GL drivers keep internal references to textures attached to
framebuffers. Deleting a texture while still attached can cause
use-after-free in driver memory, observed as crashes on NVIDIA
during rapid preset switching or window resize.

Detach all textures before deletion in both ~Framebuffer() and
SetSize(), using a three-phase detach → resize → reattach pattern
in SetSize() to avoid referencing stale texture IDs.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants