Release Date

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:

Changes Since 3.1.12

User-Related Changes

  • Improved waveform and shape line rendering to match Milkdrop's way of drawing.
  • Fixed some bugs rendering the different waveform types.
  • Added support for instanced shapes. In previous releases, only a single shape was rendered for each shapecode block, breaking many presets.
  • Fixed the built-in noise textures used by preset shaders by reimplementing Milkdrop's generator code. Noise textures now have four different color channels instead of having the same value on RGB and 1.0 only in the alpha channel.
  • Fixed texture coordinates in textured shapes.
  • Fixes in the preset comp/warp shader parsing code, leading to fewer broken presets.
  • Fixed numerous crashes when parsing invalid preset expressions or shaders.
  • Many more small stability and quality improvements.

Developer-Related Changes

  • Replaced the platform-specific build files with CMake.
  • Removed all non-library-related applications and files from the repository. This includes all presets except the development test presets, any user-faced frontends and other old code. The previous SDL frontend was retained as a developer-only test UI, but is not built by default and also not installed alongside the library.
  • Added a new C API, hiding all C++ types by default. This will make it easier to integrate projectM into other languages.
  • Added proper export defines to all functions. libprojectM can now be used as a shared library on all supported platforms, including Windows.
  • Moved preset playlist support to a separate, optional library. The core library now only supports loading a single preset plus a second one during transitions. The new playlist library supports loading multiple paths/files and can apply .gitignore-style filter patterns. Rating support has been removed though.
  • Removed all text overlays.
  • Replaced the key handler with specific API functions.
  • Replaced the settings struct with getter and setter API functions.
  • Removed built-in configuration file support. All non-default settings now need to be passed in from the embedding application.
  • Improved and modernized the audio data interface.
  • Enabled OpenMP support on all platforms.
  • Support multiple texture search paths.
  • Added support for loading presets from a character buffer instead of a file.
  • Added callbacks for preset switches and loading failures in the core library.
  • Fixed a crash that occurred if OpenGL wasn't initialized properly. projectm_create() will now simply return NULL in this case.

Issues Remaining Unresolved in the 4.0.0 Release

These issues will be fixed or implemented after the 4.0 release, as they don't affect the API backward compatibility:

  • Supporting missing expression features like megabuf and loop.
  • Fixing the issue projectM is loading all textures into (V)RAM on startup instead of only loading those which are used by the current preset.
  • Improve rendering quality on high-res displays by gradually scaling line thickness.
  • Adding more debugging functions to analyze rendering internals and preset expression values on the application side.