Commit Graph

2224 Commits

Author SHA1 Message Date
e538ccc615 Fix bug that prevents composite shader from being loaded
Happens in the rare cases if a preset has no warp shader
2024-03-19 23:14:10 +01:00
bc9937f34e Fix #if USE_GLES to #ifdef in SDL test UI 2024-03-19 23:14:09 +01:00
861c36e41b Scale and smooth samples for non-custom waveforms 2024-02-21 16:12:31 +01:00
3aa48a3f99 Modify NaN propagation for multiplication 2024-02-21 14:36:35 +01:00
0c27e8164a Mimic Milkdrop code when handling RGBA values outside [0.0, 1.0] 2024-02-21 14:12:33 +01:00
d6b6446ac9 Make sure easter egg value is >0.
Gaussian distribution requires the sigma value to be >0. If the value is too small, we just use the default 1.0 value.
2024-02-15 18:11:46 +01:00
1477664182 Move noise texture creation into MilkdropNoise class.
No need to create an instance of the class as all generators are static. Use std::vector instead of C-style pointers as pixel buffer.
2024-02-15 18:11:39 +01:00
2eb1e41f5f Pre-allocate vertex buffers for warp/comp meshes and borders 2024-02-12 16:39:18 +01:00
fcafa568cd Improve performance with vertex buffer updates
In wave/shape drawing code, we now preallocate the vertex buffer once for the maximum number of sides and only update the existing buffer instead of reallocating it over and over again. Trades a few KB of additional RAM for a good amount of drawing performance.

In the motion vector grid code, we only reallocate the buffer if we draw more vertices than in the previous draw call.

Also changed the drawing hint to GL_STREAM_DRAW, which is slightly better suited for this kind of usage (update once, draw once, repeat).

These changes should hopefully improve performance, especially when large numbers of custom shapes are drawn.
2024-02-12 15:14:16 +01:00
f22cc42a61 Added requested revision 2024-02-11 22:40:11 +01:00
0067e82f7e Fix various typos
Found via `codespell -q 3 -S "./vendor" -L ist`
2024-02-11 22:40:11 +01:00
d82c031671 Use PRJM_EVAL_F in ShapePerFrameContext 2024-02-09 20:30:42 -06:00
12db8d9b94 Fix buffer overrun in WaveformMath
32 excess samples were read from the preset state in waveform modes. Didn't have any noticeable impact, but we should clearly not read over the end of an array.
2024-02-09 21:37:58 +01:00
5c0d61cff7 Use renderContext for preset state time, frame, fps, progress 2024-02-06 16:41:31 -06:00
bd7d5574a2 Keep active preset running if loading fails.
Also don't cancel any transition in progress etc., so if the app retries with a different preset, we only smoothly transition to the new, working one.
2024-02-06 15:11:52 +01:00
4eefc2c05c Remember last playlist navigation direction in case a preset fails to load.
The playlist wrapper will now continue to repeat the directional navigation command issued in the original API call.
2024-02-06 15:11:37 +01:00
c5ecad05db Format cleanup 2024-02-06 07:58:32 -06:00
0ea5bba3d7 WaveformAligner test fixes 2024-02-06 07:58:32 -06:00
305f78f177 Split WaveformAligner up into multiple testable methods 2024-02-06 07:58:32 -06:00
bd592bdb2e Rename WaveformAligner variables to be clearer, add comments 2024-02-06 07:58:32 -06:00
7c425f7469 WaveformAligner type refactor 2024-02-06 07:58:32 -06:00
0beb7a2d09 Relocated dll's to PROJECTM_BIN_DIR on Windows 2024-02-02 10:21:25 -06:00
60e5607877 Fixed a bug in TextureManager, failed to load textures if prefixes (fw_...) were used. 2024-02-02 15:08:05 +01:00
a1d300f48c Include cleanup, plus a few small code improvements.
Also removed empty FrameAudioData implementation file.
2024-02-02 15:08:05 +01:00
27f3308ac3 Remove utterly useless multithreading switch
Since we're using OpenGL, everything has to be done in the same thread anyways. Besides that, the actual "multithreading" implementation was basically starting an empty thread that did absolutely nothing, then wait synchronously for it to complete and join it on the next frame.
2024-02-02 15:08:04 +01:00
184766b2c8 pkgconfig fixes 2024-02-02 15:08:04 +01:00
df48f1bb07 Remove RandomNumberGenerators.hpp and replace the only invocation with std::normal_distribution 2024-02-02 15:08:04 +01:00
0789c54404 Remove unnecessary feature detections, move filesystem defines to config.h. 2024-02-02 15:08:04 +01:00
c2f2e7a0d3 Deleted useless .gitignore file.
Most files ignored were no longer in the repository, and the rest is already covered by the top-level .gitignore file.
2024-02-02 15:08:04 +01:00
170f054860 Remove no longer used LLVM support code. 2024-02-02 15:08:04 +01:00
1513675c31 Remove no longer used omptl and OpenMP support.
Fixup: remove omtpl
2024-02-02 15:08:04 +01:00
7e45cbe1f9 Clean up minor warnings and code style
* Remove warnings for code in vendor folders
* Add pedantic and extra warnings in GCC only to projectM sources
* Rename ResetOpenGL to SetWindowSize
2024-02-01 11:27:10 -06:00
3fc7c9dd2f Replace low-level FS API with std:: or boost::filesystem.
Also gets rid of the dirent.h hack used on Windows platforms, as the filesystem API hides all the OS-specific stuff, and we can use a recursive iterator instead of doing that ourselves, making the code even cleaner.
2024-01-30 15:25:29 +01:00
3cba474888 Move filesystem support check to top level CMakeLists.txt
Preparing to replace the low-level POSIX API usage in FileScanner.cpp.
2024-01-30 14:43:10 +01:00
fbb74ccd0b Fix a buffer overrun in PCM::GetFrameAudioData().
This did not have any real impact, as the excess bytes were written into the next buffer, which was then immediately "fixed up" during the following copy call with the correct data, but could cause a crash and other nasty things if someone would reorder the class members or insert something in between.
2024-01-30 10:54:16 +01:00
2c5a763dc1 Pass optional dependency on Boost::filesystem to downstream projects. 2024-01-19 11:57:06 +01:00
6e93c1f624 Consolidate USE_GLES define usage. 2024-01-19 11:57:06 +01:00
4a89b5fc85 Added precision specifier for sampler3D.
This sampler type is not covered by the default precision specifier, so we have to add it.
2024-01-19 11:57:06 +01:00
d7d72bc77c Add float precision to transition shader headers.
This is required by OpenGL ES, as it has no default precision set.
2024-01-19 11:57:06 +01:00
04bf637aa1 Make X wave rotatable via "mystery" wave parameter.
Addition from Incubo's BeatDrop code.
2023-12-30 15:07:05 +01:00
74ed428430 Added seven additional waveform modes from Milkdrop 3
Waveform code was kindly provided and used with permission by Milkdrop2077.

Had to make a few amends though, as some sample offsets went over the allocated waveform sample count (>480), leading to memory issues.
2023-12-30 14:56:35 +01:00
1350028430 Move default waveform math to separate classes.
Gets rid of this hube WaveformMath() function and provides a framework to easily add more wave modes.
2023-12-30 14:56:35 +01:00
9762297909 Properly namespace all classes under "::libprojectM" 2023-12-30 14:56:35 +01:00
39605b645a Fixed a few compiler warnings. 2023-12-30 14:56:35 +01:00
0dfefc2fa4 Fixed Windows build with latest SDK
Made changes to pmSDL.hpp in order to fix build errors related to order of included Windows libraries.
2023-12-29 22:27:48 +01:00
9b03314d19 Fix generator expressions showing up in pkgconfig files
Instead of using these expressions, adding "lib" in fron of static libs is now done via CMAKE_STATIC_LIBRARY_PREFIX when building static libs on Windows.
2023-11-26 13:52:10 +01:00
1e0f8c6b10 Fix position of headphones in idle preset.
Now that everything renders in the right orientation, the idle preset's headphones coordinates were a bit off, rendering at the bottom of the M logo.
2023-11-25 14:44:45 +01:00
b85b631c68 Fix shading language version detection when using WebGL
WebGL doesn't follow the OpenGL standard format for the glGetString(GL_SHADING_LANGUAGE_VERSION) return value. Chrome for example will return "OpenGL ES GLSL ES 3.00 (WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0 Chromium))", which does not start with the version number as the standard suggests.

This fix will simply cut off any text preceding the first digit found in the string, if any.
2023-11-25 03:36:53 +01:00
9c68339d1d Fixed some Doxygen comments in the audio headers. 2023-11-24 23:51:10 +01:00
cf7d08c2ff Consolidate how update methods are called.
Directly passing references to the affected members is easier to read in the main UpdateFrameAudioData() method.
2023-11-24 21:00:40 +01:00