Commit Graph

904 Commits

Author SHA1 Message Date
3a0dcffcee Shader refactoring.
Move Milkdrop-specific shader code into MilkdropPreset, only keep generic and potentially reusable stuff in Renderer.

Also adding some abstraction to reduce the number of direct OpenGL calls to make it easier to add other rendering APIs in the future.
2023-09-11 10:19:45 +02:00
b9ef6a3974 Remove old expression parser and add the new projectm-eval lib.
Requires a general rewrite of the Milkdrop preset code. Previous implementation was tightly integrated into the code parser, so reusing this code wasn't possible. Additional refactoring was done, finished converting custom wave/shape implementations to use the new expression parser code.
2023-09-11 10:19:45 +02:00
dfe08a14bb Fix some errors in FileParser 2023-09-11 10:19:45 +02:00
1c436c3277 Format old parser code and fix a linker error. 2023-09-11 10:19:45 +02:00
caee555eed Added missing <functional> include GCC automatically includes for some reason. 2023-09-11 10:19:45 +02:00
7b2b60d61f Added a new preset file parser class.
Other changes:
- Renamed Parser to OldParser to make it clear this is going away.
- Removed all the useless "unit tests" which did not actually test anything.
- Added a new GTest-based test executable that can be run with CMake's CTest.
- Added unit tests for the new fileParser class, including test files.
2023-09-11 10:19:40 +02:00
91bc04d780 Refactor Windows defines with generator expression 2023-06-11 18:04:13 +02:00
8b67eac528 Scope OpenGL deprecation define to macOS only 2023-06-11 18:04:13 +02:00
69b4c6a8ee Remove obsolete defines from the buildsystem
None of these defines are used anywhere in the code, so they should be
safe to delete.
2023-06-11 18:04:13 +02:00
97880cb932 Fix install components for main projectM library.
Allows users to install only runtime libraries OR development files, e.g. to create separate "libprojectM" and "libprojectM-dev" packages on Linux.
2023-03-23 10:48:12 +01:00
b9f1c16f58 Move third-party libraries to "vendor" dir. 2023-03-03 14:30:24 +01:00
94fee67baf Fix unused variable warning in release mode
The assert() is removed in release mode causing unused variable
warning noise.
2023-02-27 23:57:06 +01:00
221b3cb4b7 Rename .cmake.in files from "libprojectM" to "projectM4" 2023-02-22 16:34:46 +01:00
3f66e184ae CMake: Replace "libprojectM(Playlist)Targets" by "projectM4(Playlist)Targets"
$ git grep -l Targets.cmake | xargs sed 's,libprojectM\(Playlist\)\?Targets\.cmake,projectM4\1Targets.cmake,' -i
2023-02-22 16:34:46 +01:00
37eb503748 CMake: Replace "libprojectM(Playlist)Config" by "projectM4(Playlist)Config"
$ git grep -l configure_package_config_file | xargs sed 's,libprojectM\(Playlist\)\?Config,projectM4\1Config,' -i
2023-02-22 16:34:46 +01:00
35c5246936 CMake: Replace "libprojectM" by "projectM4" in .cmake.in files
$ sed 's,libprojectM,projectM4,' ./src/*/libprojectM*Config.cmake.in -i
2023-02-22 16:34:46 +01:00
ee65fa55fd CMake: Replace "cmake/libprojectM" by "cmake/libprojectM4"
$ git grep -l cmake/libprojectM | xargs sed 's,cmake/libprojectM,cmake/projectM4,' -i
2023-02-22 16:34:46 +01:00
0940ec9532 Replace "-4.0" by "-4" 2023-02-22 16:34:46 +01:00
0c04a08941 Replace '#include "libprojectM/[..]"' by '#include "projectM-4.0/[..]"'
$ git grep -l 'include "libprojectM/' | xargs sed 's,include "libprojectM/,include "projectM-4.0/,' -i

And then revert for src/libprojectM/*.hpp includes:

$ for i in $( cd src/libprojectM && ls -1 *.hpp ) ; do grep -Rl "#include \"projectM-4.0/${i}\"" | xargs -r sed "s,\"projectM-4.0/${i},\"libprojectM/${i}," -i ; done
2023-02-22 16:34:46 +01:00
4502f03fd1 CMake: Replace "${PROJECTM_INCLUDE_DIR}/libprojectM" by "${PROJECTM_INCLUDE_DIR}/projectM-4.0" 2023-02-22 16:34:46 +01:00
c9b946be86 CMake: Set OUTPUT NAME to affect .so filenames
Old:
- libprojectM.so
- libprojectM_playlist.so

New:
- libprojectM-4.0.so
- libprojectM-4.0-playlist.so
2023-02-22 16:34:46 +01:00
0ef8e83cd9 CMake: Add "-4.0" and drop "lib" from pkg-config names 2023-02-22 16:34:46 +01:00
aaeea0b083 Renamed m_textureSizeX/Y to m_mainTextureSizeX/Y in class Renderer. 2023-01-25 18:11:49 +01:00
15cd0612e0 Removed unused textureRenderToTexture member in Renderer. 2023-01-25 18:11:22 +01:00
46e720a7a7 Removed unused projectm_opengl_init_render_to_texture() API function. 2023-01-25 18:10:26 +01:00
e6b493a270 Removed unused projectm_set_texture_size() API function. 2023-01-25 18:09:02 +01:00
13437a5d91 Preset parser: Removed a few commented debug lines and one that wasn't wrapped in the PARSE_DEBUG define. 2023-01-25 15:42:47 +01:00
a4bcee241a Preset parser: Throw exception instead of calling SIGABRT if expression can't be parsed. 2023-01-25 15:42:47 +01:00
bd6d9805fc Preset parser: Return 0.0 constant on empty rvalue if line is terminated properly.
Crashed on presets with expression lines like "val = ;".
2023-01-25 15:42:47 +01:00
8e594bc8e9 Fix index-out-of-bounds crash when getting shader param substring. 2023-01-25 15:42:46 +01:00
2b41fa256a Let developers provide an optional filename for dumping main texture contents. 2023-01-25 14:22:19 +01:00
45d05b71d0 Fix hard crash if OpenGL wasn't properly initialized on projectM instance creation.
Now projectm_create() will just return a NULL pointer instead of having the runtime library call SIGABRT.

In a later iteration, we may allow creation of the instance and just keep the renderer uninitialized. Users should then call a to-be-introduced renderer reinitialization function.
2023-01-24 20:21:41 +01:00
a88f62360a Add version header and API methods to get build/run time versions of libprojectM. 2023-01-24 20:03:44 +01:00
a85f9c61ef Add OpenMP libraries and flags to libprojectM pkg-config file. 2023-01-24 19:19:53 +01:00
ebafd69dfb Create proper pkg-config file for libprojectM_playlist.
Generalized the generator code as a macro. Still a huge mess.
2023-01-24 19:13:07 +01:00
2287172cbb Create proper pkg-config file for libprojectM.
Should now support both static and shared libs, plus adding any other required flags.
2023-01-24 18:49:37 +01:00
bcaf98f2f1 Rename USE_THREADS to PROJECTM_USE_THREADS and export it in the package config file.
PROJECTM_USE_THREADS is only exported if ENABLE_CXX_INTERFACE is ON.
2023-01-24 17:56:12 +01:00
bff9e52c69 Reduce header footprint of optional C++ API files and export C++ symbols properly. 2023-01-24 17:47:39 +01:00
1f33c810b3 Split up API headers into smaller, categorized files.
Also updated copyright and prefixed the render-related function with "opengl".
2023-01-18 12:57:57 +01:00
c6be80a491 GitHub Actions: Update local package lists before installing dependencies. 2023-01-17 18:58:03 +01:00
edbe7455da macOS: Link CoreFoundation framework to the projectM library. 2023-01-17 18:55:23 +01:00
6e795ec632 Only build either shared or static projectM and playlist libraries.
Target name is now just libprojectM::projectM for the main library instead of libprojectM::static or libprojectM::shared.

Now using CMake's default mechanism to select the resulting library type via the BUILD_SHARED_LIBS variable. Main use case will be working with the shared library, which is the default.

Playlist library now also builds as a shared library, including proper symbol exports.

Additionally, deleted the leftover TestRunner class and a few old and rather useless test cases.

Also added LLVM find_package call and as a link dependency if the build is configured for using (experimental) LLVM code.

Reorganized tests to link either one of the object libraries for unit testing.
2023-01-13 11:16:27 +01:00
c8077a2145 Partially fix smooth blending.
There's still a sudden change between presets halfway through the transitions as the shaders are swapped, but fixing this would require a larger rewrite of how presets are rendered in the pipeline. Will do this later.
2023-01-07 15:52:51 +01:00
eb95939419 Clamp preset progress between 0.0 and 1.0 2023-01-07 15:52:51 +01:00
3dcb1f7a56 Fix preset change notification. 2023-01-07 15:52:51 +01:00
d7528f7e2e Pass new TextureManager pointer to ShaderEngine after resetting it. 2023-01-07 15:52:50 +01:00
48f291b51c Removed config file support and added temp fix for mesh size change.
Mesh size is currently so deeply burrowed in the whole preset structure that changing it on the fly is basically impossible. For now, we'll reload the idle preset and reset the whole preset factory class tree to make sure all classes are properly reinitialized. If apps want to change the mesh size after startup, they need to reload the last played preset after changing the mesh size. This will be fixed in the future after the parser/equation compiler rewrite.
2023-01-07 15:52:50 +01:00
bbfc4f7170 Added API method for (re)setting texture search paths.
Was only possible on startup before, changing the paths required recreating the whole projectM instance. Now, the method will only reset the texture manager, but not the shaders and presets.
2023-01-07 15:52:50 +01:00
22b0ccc423 Removed some unused offset parameters in Renderer methods. 2023-01-07 15:52:46 +01:00
2410adc92e Fix file type string 2023-01-05 07:24:26 -06:00