[DEV BUG] Incorrect rendering of certain pre-2.0 presets possibly due to default warp shader
Please confirm the following points:
- [x] This report is NOT about the Android apps in the Play Store
- [x] I have searched the project page to check if the issue was already reported
Affected Project
libprojectM (including the playlist library)
Affected Version
4.1.5
Operating Systems and Architectures
Windows (x64)
Build Tools
Build Tool: MSBuild
Additional Project, OS and Toolset Details
- gst-projectm plugin, Visual Studio 2022
- compared to Steam front end for Windows
Type of Defect
Graphical issue (rendering glitches, no or broken rendering result)
Log Output
Describe the Issue
One of my favorite presets, Phat_Eo.S. rainbow bubble_mid3-f. me dood does not render correctly in the latest version of ProjectM. I tested this on Windows using the projectM-visualizer/gst-projectm plugin. It appears to be an issue on other platforms as well, as confirmed by CodAv on Discord.
Interestingly, it renders correctly in the (long outdated) Steam frontend for ProjectM, so that rules out any fundamental issues with OpenGL.
Here is how the preset is supposed to render, as recorded in the Steam frontend on Windows:
https://github.com/user-attachments/assets/bc2070fa-4118-493c-a950-41868a3dfd89
Here is how it incorrectly renders in the latest version of ProjectM as described.
https://github.com/user-attachments/assets/89d278a7-fb14-4a21-b5e1-4be6f086ba69
Already found the culprit, it's the 16-bit "fix". I've removed it, as it capped the decay value to 0.9375 where it should go up to 1.0. This will certainly improve many other presets as well I guess.
Thanks for bringing it up, this will be another huge quality bump!
For reference, here's Milkdrop's approach. They use a value m_n16BitGamma which is set to either 0 or 2, in conjunction with m_bAutoGamma:
- Initialized here
- Read from Milkdrop's INI here
- GPU-specific adjustments here
- using it to clamp decay here
I've obviously overlooked the condition that this is only done for specific 16-bit surface formats, which projectM doesn't even support internally.