projectM - Cross-platform Music Visualization Library. Open-source and Milkdrop-compatible.
This is a small bug fix release that corrects some issues found in version 4.1.
USE_PTHREADS
option for emscripten buildsAfter about a year of work, we're finally ready to release libprojectM 4.1, which is in fact the actual "major" release in regards of general improvements over the 3.1 release series. Most of libprojectM's codebase has been refactored or rewritten from scratch to bring it to more modern standards, make it easier to maintain and - most importantly - vastly improve Milkdrop compatibility and overall performance.
While the 4.0 version was mainly focused on updating the build system and introducing a stable API which developers can use to integrate it into their applications, it didn't change much in regards to preset rendering quality and Milkdrop compatibility.
This release focuses on bringing libprojectM mostly on par with Milkdrop, implementing some missing features and improving the preset rendering process to match Milkdrop's code as closely as possible.
The libprojectM C API and ABI did not change since 4.0, making it a drop-in replacement with no changes required in application code. When using the shared library, replacing the library file(s) will be sufficient to use the new version, no rebuild/relink is required in this case.
The projectM team also wants to thank all contributors for their efforts, making this release possible!
+=
and greatly improving the execution speed.Full Changelog: https://github.com/projectM-visualizer/projectm/compare/v4.0.0...v4.1.0
refract()
).This is the final 4.0 release of libprojectM.
It's been about two years after the last 3.1 release, but the projectM core team and community worked hard to make projectM better for both end users and developers integrating the library into their own applications.
Since this release is mainly aimed at developers, we will only attach source packages to this release. If you want pre-built libraries, please download the latest artifacts from the automated GitHub Actions builds.
As always, if you find bugs or have feature suggestions or requests, please feel free to create an issue or post in the discussions board. We're also available for chat on our Discrod server, which is linked on the project page.
This release is mainly aimed at developers integrating projectM into their applications. The main focus of this major release was to provide a new, stable API based on pure C functions, which will make it easier to create bindings for other languages as well as using it as a shared library. We also fixed many crashes and improved the overall visual quality and compatibility of presets to some degree.
The API will remain stable and forward-compatible until the next major release. Any changes made will only include new functions, so the ABI will always stay forward-compatible. This means an application built and linked against a specific 4.x version will build and run with any libprojectM with a major version of 4 and the same or higher minor version. If an application uses libprojectM as a shared library, no relinking is required at all - simply swap the library file with the new one and it should work.
If you are an end user looking for the standalone visualizer or the Apple Music plug-in, this release isn't very useful as it only contains the projectM development libraries and headers, but no frontend or executable you can run.
Since modernizing the projectM ecosystem is a big undertaking, we've decided to postpone the major visual and UI improvements to a later point, first releasing the core library so developers can adopt the new programming interface.
You can expect a new frontend application and great Milkdrop compatibility improvements on the upcoming minor 4.1 release, which we will make available together with the updated frontends. Until then, you can use these development releases, which contain most of the changes in this 4.0 release:
To better distiguish what's part of this release and what's not, we have compiled a changelog and a list with issues that will not be fixed or implemented in the initial 4.0 version:
projectm_create()
will now simply return NULL in this case.These issues will be fixed or implemented after the 4.0 release, as they don't affect the API backward compatibility:
megabuf
and loop
.This is the first release candidate for the upcoming release of the next major version of projectM, 4.0.
It's been about two years after the last 3.1 release, but the projectM core team and community worked hard to make projectM better for both end users and developers integrating the library into their own applications.
The main focus of this major release was on making libprojectM easier to integrate with applications, create bindings for other languages and creating a stable API interface users of libprojectM can rely upon. We also fixed many crashes and improved the overall visual quality and compatibility of presets to some degree.
This pre-release is mainly aimed at developers integrating projectM into their applications. Please test this release as thoroughly as possible and report any issues or requests in our issue tracker or the discussion thread.
To better distiguish what's part of this release and what's not, we have compiled a changelog and a list with issues that will not be fixed or implemented in the initial 4.0 version.
Important: This release is not yet considered production-ready as things can still change until final release.
If you are an end user looking for the standalone visualizer or the Apple Music plug-in, this release isn't for you as it only contains the projectM static/shared libraries and development headers, but no frontend executable. Please have a look in the respective frontend repositories to check for new releases:
projectm_create()
will now simply return NULL in this case.These issues will be fixed or implemented after the 4.0 release, as they don't affect the API backward compatibility:
megabuf
and loop
.Fixes #468 missing Intrinsics.h
#457 - Wavemode 7 support #461 - 80% of the way there for Apple Silicon M1 support (almost able to build universal binaries. https://discourse.libsdl.org/t/compile-macos-universal/28759) macOS installer now a single installer for both SDL app and Music.app plugin #462 - fix shader compilation with GLSL 330
Mac build should now be code signed. Please file an issue if you get have any issues running it.
A great deal of compatibility improvements, stability fixes, and minor enhancements. Commits
ProjectM should be more stable and look better.
@stevenswart did some great work collecting broken presets and @mbellew and @revmischa used them to track down some parsing and rendering issues with malformed presets and incorrect emulation of Milkdrop.
Open issue with shaders: #460
Vendoring libglm
headers to remove a dependency
Subdirectory scanning for textures and presets
Support for text drawing and feedback in pmSDL (may not be enabled by configuration)
macOS should support building with autotools now, not just xcode
Other assorted small fixes: https://github.com/projectM-visualizer/projectm/compare/v3.1.3...master
Testing improvements in loading textures and presets from subdirectories. #385
Should fix macOS missing libSDL2 dylib #363
Windows version not building yet... need fixing https://github.com/projectM-visualizer/projectm/pull/385#issuecomment-663873827
Input device capture toggle support (@coast77777777777)