Releases: projectM-visualizer/projectm
libprojectM Release 4.1.2
This bugfix release addresses two OpenGL-related issues causing GL errors, and adds some improvements to the vcpkg manifest which were required for adding the projectM library to the official vcpkg ports. This release does not contain any other functional improvements or API changes.
What's Changed
- Fix GL_INVALID_ENUM error in CopyTexture (PR #826)
- Fixed variable using reserved word in vertex shader (PR #832)
- vcpkg fix for projectm eval (PR #835)
Full Changelog: v4.1.1...v4.1.2
libprojectM Release 4.1.1
This is a small bug fix release that corrects some issues found in version 4.1.
Changes since 4.1.0
Enhancements
- Added CMake
USE_PTHREADS
option for emscripten builds
Bugs
- Fixed a bug that prevented a preset's composite shader from being loaded if the warp shader was empty
- Fixes to GLM CMake targets/usage
- Fixed a broken #ifdef in the SDL test UI
- Fixed SOIL2 include directories
libprojectM Release 4.1
After 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.
Target Audience: Users
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!
Changes since 4.0
- A from-scratch rewrite of the parser running the math expressions in presets, implementing all previously missing features like megabuf, loops, regXX vars, compound operators like
+=
and greatly improving the execution speed. - Reworked the whole preset rendering process, carefully implementing each step and effect to match Milkdrop's rendering process and math.
- Reintroduced smooth preset transitions, using custom blending shaders.
- Reimplemented the audio processing code to match Milkdrop's spectrum analyzer and waveform preprocessing.
- Added support for the new waveform modes added in BeatDrop and Milkdrop2077.
- Properly implemented texture loading, including better memory management and random texture selection.
- Improved support for OpenGL ES platforms, e.g. Android, Raspberry Pi and WebGL/Emscripten.
- Fixed issues with displaying broken presets and skipping them properly using the playlist library.
- Improved HLSL to GLSL shader translation, added missing functions and workarounds for undocumented math function behavior.
- Numerous other bug fixes, improvements and cleanups.
Full Changelog: v4.0.0...v4.1.0
Known issues
- Some presets render too dark on higher resolutions. This problem is also happening in Milkdrop. See issue #682
- Presets with broken (syntactically invalid) expression code won't load. Loading such presets will not be supported, the presets should be fixed instead.
- Some preset shaders still cannot be translated correctly or render differently/black. There are various reasons for this issue, e.g. incompatibilities between HLSL and GLSL, or the shader translator not supporting some HLSL functions (e.g.
refract()
).
libprojectM Major Release v4.0.0
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.
Target Audience: Developers
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.
What About Users?
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:
- Standalone application for Windows/macOS/Linux: https://github.com/kblaschke/frontend-sdl2/releases
- Apple Music plug-in for macOS: https://github.com/kblaschke/frontend-music-plug-in/releases/tag/v3.0-pre1
Changes Since 3.1.12
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:
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
andloop
. - 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.
libprojectM v4.0.0-rc1
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:
- https://github.com/projectM-visualizer/frontend-sdl2
- https://github.com/projectM-visualizer/frontend-music-plug-in
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
andloop
. - 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.
v3.1.12
v3.1.11 macOS cleanup
#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.
v3.1.10-alpha - Stability
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
v3.1.7
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: v3.1.3...master
v3.1.6 Prerelease
Testing improvements in loading textures and presets from subdirectories. #385
Should fix macOS missing libSDL2 dylib #363
Windows version not building yet... need fixing #385 (comment)