diff --git a/CMakeLists.txt b/CMakeLists.txt index 2da6daf..9313f20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,25 +1,11 @@ -cmake_minimum_required(VERSION 3.5) -project(visualization.projectm) +cmake_minimum_required(VERSION 3.21) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) +project(visualization.projectm) find_package(Kodi REQUIRED) -find_package(glm REQUIRED) -find_package(ProjectM REQUIRED) - -if(NOT WIN32 AND (APP_RENDER_SYSTEM STREQUAL "gl" OR NOT APP_RENDER_SYSTEM)) - find_package(OpenGl REQUIRED) - set(DEPLIBS ${OPENGL_LIBRARIES}) - set(includes ${OPENGL_INCLUDE_DIR}) - add_definitions(${OPENGL_DEFINITIONS}) -else() - find_package(OpenGLES REQUIRED) - set(DEPLIBS ${OPENGLES_LIBRARIES}) - set(includes ${OPENGLES_INCLUDE_DIR}) - add_definitions(${OPENGLES_DEFINITIONS}) -endif() +find_package(projectM4 REQUIRED COMPONENTS Playlist) -list(APPEND DEPLIBS ${PROJECTM_LIBRARIES}) +list(APPEND DEPLIBS libprojectM::playlist) include_directories(${includes} ${PROJECTM_INCLUDE_DIRS} diff --git a/FindOpenGLES.cmake b/FindOpenGLES.cmake deleted file mode 100644 index aaae6d0..0000000 --- a/FindOpenGLES.cmake +++ /dev/null @@ -1,69 +0,0 @@ -#.rst: -# FindOpenGLES -# ------------ -# Finds the OpenGLES2 and OpenGLES3 library -# -# This will define the following variables: -# -# OPENGLES_FOUND - system has OpenGLES -# OPENGLES_INCLUDE_DIRS - the OpenGLES include directory -# OPENGLES_LIBRARIES - the OpenGLES libraries -# OPENGLES_DEFINITIONS - the OpenGLES definitions -# -# Note: -# On Windows with angle the *_INCLUDE_DIRS and -# *_DEFINITIONS are undefined, but are set -# global by the kodi-angle package. - -if(WIN32) - # defined here and not on addon to have it free of OS related 'if' - # and this file as standard for addons where need it - find_package(kodi-angle REQUIRED) - set(OPENGLES_LIBRARIES kodi::angle::libGLESv2 kodi::angle::libEGL) - set(OPENGLES_FOUND ${kodi-angle_FOUND}) - set(OPENGLES_DEFINITIONS -DHAS_GLES=3) -else() - if(CORE_PLATFORM_NAME_LC STREQUAL rbpi) - set(_brcmprefix brcm) - endif() - - if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_OPENGLES ${_brcmprefix}glesv2 QUIET) - endif() - - if(NOT CORE_SYSTEM_NAME STREQUAL ios AND - NOT CORE_SYSTEM_NAME STREQUAL darwin_embedded) - find_path(OPENGLES_INCLUDE_DIR GLES2/gl2.h - PATHS ${PC_OPENGLES_INCLUDEDIR}) - find_library(OPENGLES_gl_LIBRARY NAMES ${_brcmprefix}GLESv2 - PATHS ${PC_OPENGLES_LIBDIR}) - else() - find_library(OPENGLES_gl_LIBRARY NAMES OpenGLES - PATHS ${CMAKE_OSX_SYSROOT}/System/Library - PATH_SUFFIXES Frameworks - NO_DEFAULT_PATH) - set(OPENGLES_INCLUDE_DIR ${OPENGLES_gl_LIBRARY}/Headers) - endif() - - find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h) - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(OpenGLES - REQUIRED_VARS OPENGLES_gl_LIBRARY OPENGLES_INCLUDE_DIR) - - find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h - PATHS ${PC_OPENGLES_INCLUDEDIR}) - - if(OPENGLES_FOUND) - set(OPENGLES_LIBRARIES ${OPENGLES_gl_LIBRARY}) - if(OPENGLES3_INCLUDE_DIR) - set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR} ${OPENGLES3_INCLUDE_DIR}) - set(OPENGLES_DEFINITIONS -DHAS_GLES=3) - mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES3_INCLUDE_DIR OPENGLES_gl_LIBRARY) - else() - set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR}) - set(OPENGLES_DEFINITIONS -DHAS_GLES=2) - mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES_gl_LIBRARY) - endif() - endif() -endif() diff --git a/FindOpenGl.cmake b/FindOpenGl.cmake deleted file mode 100644 index 67a6dc2..0000000 --- a/FindOpenGl.cmake +++ /dev/null @@ -1,41 +0,0 @@ -#.rst: -# FindOpenGl -# ---------- -# Finds the FindOpenGl library -# -# This will define the following variables:: -# -# OPENGL_FOUND - system has OpenGl -# OPENGL_INCLUDE_DIRS - the OpenGl include directory -# OPENGL_LIBRARIES - the OpenGl libraries -# OPENGL_DEFINITIONS - the OpenGl definitions - -if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_OPENGL gl QUIET) -endif() - -if(NOT CORE_SYSTEM_NAME STREQUAL osx) - find_path(OPENGL_INCLUDE_DIR GL/gl.h - PATHS ${PC_OPENGL_gl_INCLUDEDIR}) - find_library(OPENGL_gl_LIBRARY NAMES GL OpenGL - PATHS ${PC_OPENGL_gl_LIBDIR}) -else() - find_library(OPENGL_gl_LIBRARY NAMES OpenGL - PATHS ${CMAKE_OSX_SYSROOT}/System/Library - PATH_SUFFIXES Frameworks - NO_DEFAULT_PATH) - set(OPENGL_INCLUDE_DIR ${OPENGL_gl_LIBRARY}/Headers) -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(OpenGl - REQUIRED_VARS OPENGL_gl_LIBRARY OPENGL_INCLUDE_DIR) - -if(OPENGL_FOUND) - set(OPENGL_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR}) - set(OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY}) - set(OPENGL_DEFINITIONS -DHAS_GL=1) -endif() - -mark_as_advanced(OPENGL_INCLUDE_DIR OPENGL_gl_LIBRARY) - diff --git a/FindProjectM.cmake b/FindProjectM.cmake deleted file mode 100644 index a38ea7e..0000000 --- a/FindProjectM.cmake +++ /dev/null @@ -1,60 +0,0 @@ -# - Try to find ProjectM -# Once done this will define -# -# PROJECTM_FOUND - system has libprojectM -# PROJECTM_INCLUDE_DIRS - the libprojectM include directory -# PROJECTM_PKGDATADIR - the libprojectM directory with required data, e.g. presets -# PROJECTM_LIBRARIES - The libprojectM libraries - -if(WIN32) - find_path(PROJECTM_INCLUDE_DIRS libprojectM/projectM.hpp) - find_path(PROJECTM_PKGDATADIR NAMES config.inp PATH_SUFFIXES share/projectM) - find_library(PROJECTM_LIBRARIES projectM) - - if(PROJECTM_INCLUDE_DIRS AND PROJECTM_PKGDATADIR AND PROJECTM_LIBRARIES) - set(PROJECTM_FOUND TRUE) - endif() - - find_package(dlfcn-win32 REQUIRED) - list(APPEND PROJECTM_LIBRARIES ${dlfcn-win32_LIBRARIES}) - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(projectM DEFAULT_MSG PROJECTM_INCLUDE_DIRS PROJECTM_LIBRARIES PROJECTM_DATA) - - mark_as_advanced(PROJECTM_INCLUDE_DIRS PROJECTM_LIBRARIES PROJECTM_DATA) -else() - find_package(PkgConfig) - if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_PROJECTM libprojectM QUIET) - - if(EXISTS ${PC_PROJECTM_PREFIX}/share/projectM) - set(PC_PROJECTM_PKGDATADIR ${PC_PROJECTM_PREFIX}/share/projectM) - else() - execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=pkgdatadir libprojectM --prefix-variable=${PC_PROJECTM_PREFIX} - OUTPUT_VARIABLE PC_PROJECTM_PKGDATADIR - RESULT_VARIABLE _pkgconfig_failed) - if (_pkgconfig_failed) - message(FATAL_ERROR "Missing libprojectM pkgdatadir") - endif() - - string(REGEX REPLACE "[\r\n]" "" PC_PROJECTM_PKGDATADIR "${PC_PROJECTM_PKGDATADIR}") - endif() - endif() - - find_path(PROJECTM_INCLUDE_DIRS libprojectM/projectM.hpp - PATHS ${PC_PROJECTM_INCLUDEDIR}) - find_path(PROJECTM_PKGDATADIR NAMES config.inp presets/presets_projectM - PATH_SUFFIXES projectM - PATHS ${PC_PROJECTM_PKGDATADIR}) - find_library(PROJECTM_LIBRARIES NAMES projectM - PATHS ${PC_PROJECTM_LIBDIR}) - - if(APPLE) - set(PROJECTM_LIBRARIES "-framework CoreFoundation" ${PROJECTM_LIBRARIES}) - endif() - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(projectM REQUIRED_VARS PROJECTM_INCLUDE_DIRS PROJECTM_LIBRARIES PROJECTM_PKGDATADIR) - - mark_as_advanced(PROJECTM_INCLUDE_DIRS PROJECTM_LIBRARIES PROJECTM_PKGDATADIR) -endif() diff --git a/Findglm.cmake b/Findglm.cmake deleted file mode 100644 index a21f4ea..0000000 --- a/Findglm.cmake +++ /dev/null @@ -1,25 +0,0 @@ -#.rst: -# Findglm -# ------------ -# Finds the OpenGL Mathematics (GLM) as a header only C++ mathematics library. -# -# This will define the following variables: -# -# GLM_FOUND - system has OpenGLES -# GLM_INCLUDE_DIR - the OpenGLES include directory -# -# Note: Install was removed from GLM on version 0.9.9.6. - -find_package(PkgConfig) -if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_GLM glm QUIET) -endif() - -find_path(GLM_INCLUDE_DIR glm.hpp - PATHS ${PC_GLM_INCLUDEDIR} - PATH_SUFFIXES glm) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(glm REQUIRED_VARS GLM_INCLUDE_DIR) - -mark_as_advanced(GLM_INCLUDE_DIR) diff --git a/depends/common/projectm/0001-Stop-exporting-transitive-OpenGL-Boost-deps-in-CMake.patch b/depends/common/projectm/0001-Stop-exporting-transitive-OpenGL-Boost-deps-in-CMake.patch new file mode 100644 index 0000000..b8328ab --- /dev/null +++ b/depends/common/projectm/0001-Stop-exporting-transitive-OpenGL-Boost-deps-in-CMake.patch @@ -0,0 +1,39 @@ +From aa810def3e6773a5385985e1369b2bfe07ecf913 Mon Sep 17 00:00:00 2001 +From: Garrett Brown +Date: Sat, 28 Feb 2026 20:25:36 -0800 +Subject: [PATCH] Stop exporting transitive OpenGL/Boost deps in CMake config + +--- + src/libprojectM/projectM4Config.cmake.in | 16 ---------------- + 1 file changed, 16 deletions(-) + +diff --git a/src/libprojectM/projectM4Config.cmake.in b/src/libprojectM/projectM4Config.cmake.in +index 0b1639b1..af945194 100644 +--- a/src/libprojectM/projectM4Config.cmake.in ++++ b/src/libprojectM/projectM4Config.cmake.in +@@ -4,22 +4,6 @@ set(projectM4_VERSION @PROJECT_VERSION@) + + include(CMakeFindDependencyMacro) + +-if(NOT "@ENABLE_EMSCRIPTEN@") # ENABLE_EMSCRIPTEN +- if("@ENABLE_GLES@") # ENABLE_GLES +- list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") +- find_dependency(OpenGL COMPONENTS GLES3) +- else() +- find_dependency(OpenGL) +- endif() +-endif() +-if("@ENABLE_BOOST_FILESYSTEM@") # ENABLE_BOOST_FILESYSTEM +- if(POLICY CMP0167) +- cmake_policy(SET CMP0167 NEW) +- endif() +- +- find_dependency(Boost CONFIG NO_MODULE COMPONENTS Filesystem) +-endif() +- + set(_projectM4_FIND_PARTS_REQUIRED) + if(projectM4_FIND_REQUIRED) + set(_projectM4_FIND_PARTS_REQUIRED REQUIRED) +-- +2.52.0 + diff --git a/depends/common/projectm/0001-fix-gl-compile-check.patch b/depends/common/projectm/0001-fix-gl-compile-check.patch deleted file mode 100644 index e1678f1..0000000 --- a/depends/common/projectm/0001-fix-gl-compile-check.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/m4/autoconf-archive/ax_check_gl.m4 -+++ b/m4/autoconf-archive/ax_check_gl.m4 -@@ -102,7 +102,7 @@ - # else - # error no gl.h - # endif --]],[[glBegin(0)]])]) -+]],[[glClear(0)]])]) - - dnl Default include : add windows.h - dnl see http://www.opengl.org/wiki/Platform_specifics:_Windows diff --git a/depends/common/projectm/0002-fix-clang-stdlib.patch b/depends/common/projectm/0002-fix-clang-stdlib.patch deleted file mode 100644 index ff824d8..0000000 --- a/depends/common/projectm/0002-fix-clang-stdlib.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/configure.ac -+++ b/configure.ac -@@ -153,11 +153,6 @@ - - AC_PROG_MKDIR_P - --AS_IF([echo ${host} | grep -Fq android], [], -- [AX_CHECK_COMPILE_FLAG([-stdlib=libc++], [ -- CXXFLAGS="$CXXFLAGS -stdlib=libc++"]) --]) -- - AX_CHECK_COMPILE_FLAG([-std=c++11], [ - CXXFLAGS="$CXXFLAGS -std=c++11"]) - diff --git a/depends/common/projectm/CMakeLists.txt b/depends/common/projectm/CMakeLists.txt deleted file mode 100644 index 4b57b41..0000000 --- a/depends/common/projectm/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(projectm) - -if (APP_RENDER_SYSTEM STREQUAL "gles") - set(PROJECTM_CONFIG "--enable-gles") -endif() - -include(ExternalProject) -externalproject_add(projectm - SOURCE_DIR ${CMAKE_SOURCE_DIR} - UPDATE_COMMAND autoreconf -vif - CONFIGURE_COMMAND CXXFLAGS=-I${OUTPUT_DIR}/include CFLAGS=-I${OUTPUT_DIR}/include LDFLAGS=-L${OUTPUT_DIR}/lib ./configure - --disable-shared - --disable-qt - --enable-preset-subdirs - --prefix=${OUTPUT_DIR} - --with-pic ${PROJECTM_CONFIG} - INSTALL_COMMAND "" - BUILD_IN_SOURCE 1) - -install(CODE "execute_process(COMMAND make install WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})") diff --git a/depends/common/projectm/flags.txt b/depends/common/projectm/flags.txt new file mode 100644 index 0000000..e086127 --- /dev/null +++ b/depends/common/projectm/flags.txt @@ -0,0 +1 @@ +-DSTD_FILESYSTEM_EXISTS:BOOL=ON diff --git a/depends/common/projectm/linux-deps.txt b/depends/common/projectm/linux-deps.txt deleted file mode 100644 index 671b764..0000000 --- a/depends/common/projectm/linux-deps.txt +++ /dev/null @@ -1 +0,0 @@ -glm diff --git a/depends/common/projectm/projectm.sha256 b/depends/common/projectm/projectm.sha256 index 9199e60..06bca2b 100644 --- a/depends/common/projectm/projectm.sha256 +++ b/depends/common/projectm/projectm.sha256 @@ -1 +1 @@ -b6b99dde5c8f0822ae362606a0429628ee478f4ec943a156723841b742954707 +8d0206a369f172c7a66eb4acf8291f21a8ac20124a88f2865dc126e211e83a61 diff --git a/depends/common/projectm/projectm.txt b/depends/common/projectm/projectm.txt index c899503..d20913f 100644 --- a/depends/common/projectm/projectm.txt +++ b/depends/common/projectm/projectm.txt @@ -1 +1 @@ -projectm https://github.com/projectM-visualizer/projectm/releases/download/v3.1.12/projectM-3.1.12.tar.gz +projectm https://github.com/garbear/projectm/archive/e6bda8e744301f6395d4b4c8c5c77bfa9eae2598.tar.gz diff --git a/depends/windows/dirent/dirent.sha256 b/depends/windows/dirent/dirent.sha256 deleted file mode 100644 index 8e0b42c..0000000 --- a/depends/windows/dirent/dirent.sha256 +++ /dev/null @@ -1 +0,0 @@ -4bcf07266f336bcd540fec5f75e90f027bd5081d3752f9ea5d408ef6ae30a897 diff --git a/depends/windows/dirent/dirent.txt b/depends/windows/dirent/dirent.txt deleted file mode 100644 index 7236da0..0000000 --- a/depends/windows/dirent/dirent.txt +++ /dev/null @@ -1 +0,0 @@ -dirent https://github.com/tronkko/dirent/archive/1.23.2.zip diff --git a/depends/windows/projectm/0001-Fix-build-with-Angle-on-Windows.patch b/depends/windows/projectm/0001-Fix-build-with-Angle-on-Windows.patch new file mode 100644 index 0000000..66c1a20 --- /dev/null +++ b/depends/windows/projectm/0001-Fix-build-with-Angle-on-Windows.patch @@ -0,0 +1,36 @@ +From 0dfc2502047990e53d2c9c046184cd06beef7624 Mon Sep 17 00:00:00 2001 +From: Garrett Brown +Date: Sat, 28 Feb 2026 19:55:58 -0800 +Subject: [PATCH] Fix build with Angle on Windows + +Error was: + + lib/cmake/projectM4/projectM4Config.cmake:34 (find_dependency) + Could NOT find OpenGL (missing: GLES3) +--- + src/libprojectM/projectM4Config.cmake.in | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/libprojectM/projectM4Config.cmake.in b/src/libprojectM/projectM4Config.cmake.in +index 0b1639b1..cdcefe55 100644 +--- a/src/libprojectM/projectM4Config.cmake.in ++++ b/src/libprojectM/projectM4Config.cmake.in +@@ -6,8 +6,13 @@ include(CMakeFindDependencyMacro) + + if(NOT "@ENABLE_EMSCRIPTEN@") # ENABLE_EMSCRIPTEN + if("@ENABLE_GLES@") # ENABLE_GLES +- list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") +- find_dependency(OpenGL COMPONENTS GLES3) ++ # On Windows desktop we may be using ANGLE/EGL for GLES. ++ # CMake's FindOpenGL(GLES3) generally fails or conflicts, so don't ++ # import an OpenGL dependency from this package config. ++ if(NOT WIN32) ++ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") ++ find_dependency(OpenGL COMPONENTS GLES3) ++ endif() + else() + find_dependency(OpenGL) + endif() +-- +2.52.0 + diff --git a/depends/windows/projectm/0001-kodi-cmake-fixes.patch b/depends/windows/projectm/0001-kodi-cmake-fixes.patch deleted file mode 100644 index 928d13c..0000000 --- a/depends/windows/projectm/0001-kodi-cmake-fixes.patch +++ /dev/null @@ -1,133 +0,0 @@ ---- /dev/null -+++ b/config.h -@@ -0,0 +1,105 @@ -+/* config.h. Generated from config.h.in by configure. */ -+/* config.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define EMSCRIPTEN */ -+/* #undef EMSCRIPTEN */ -+ -+/* Define to 1 if you have the `aligned_alloc' function. */ -+#define HAVE_ALIGNED_ALLOC 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Defined if a valid OpenGL implementation is found. */ -+#define HAVE_GL 1 -+ -+/* Define to 1 if you have the header file. */ -+/* #undef HAVE_GLES_GL_H */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_GL_GL_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define HAVE_LLVM */ -+/* #undef HAVE_LLVM */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the header file. */ -+/* #undef HAVE_OPENGL_GL_H */ -+ -+/* Define to 1 if you have the `posix_memalign' function. */ -+#define HAVE_POSIX_MEMALIGN 1 -+ -+/* Have PTHREAD_PRIO_INHERIT. */ -+/* #undef HAVE_PTHREAD_PRIO_INHERIT */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_WINDOWS_H 1 -+ -+/* Define to the sub-directory where libtool stores uninstalled libraries. */ -+#define LT_OBJDIR ".libs/" -+ -+/* Name of package */ -+#define PACKAGE "projectM" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "mischa@mvstg.biz" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "projectM" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "projectM 3.1.7" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "projectM" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "https://github.com/projectM-visualizer/projectm/" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.1.7" -+ -+/* Define to necessary symbol if this constant uses a non-standard name on -+ your system. */ -+/* #undef PTHREAD_CREATE_JOINABLE */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define USE_GLES */ -+/* #undef USE_GLES */ -+ -+/* Define USE_THREADS */ -+#define USE_THREADS 1 -+ -+/* Version number of package */ -+#define VERSION "3.1.7" -+ -+/* Define to 1 if the X Window System is missing or not being used. */ -+#define X_DISPLAY_MISSING 1 ---- /dev/null -+++ b/src/libprojectM/config.inp.in -@@ -0,0 +1,22 @@ -+# config.inp -+# Configuration File for projectM -+ -+#Texture Size = 1024 # Size of internal rendering texture -+ -+Mesh X = 220 # Width of PerPixel Equation mesh -+Mesh Y = 125 # Height of PerPixel Equation mesh -+FPS = 35 # Frames Per Second -+Fullscreen = false -+Window Width = 512 # startup window width -+Window Height = 512 # startup window height -+ -+Smooth Transition Duration = 5 # in seconds -+Preset Duration = 30 # in seconds -+Easter Egg Parameter = 1 -+ -+Hard Cut Sensitivity = 10 # Lower to make hard cuts more frequent -+Aspect Correction = true # Custom Shape Aspect Correction -+ -+Preset Path = @DATADIR@/projectM/presets # preset location -+Title Font = Vera.ttf -+Menu Font = VeraMono.ttf diff --git a/depends/windows/projectm/0002-add-angle-to-GL-include-and-become-Win-working.patch b/depends/windows/projectm/0002-add-angle-to-GL-include-and-become-Win-working.patch deleted file mode 100644 index be670f5..0000000 --- a/depends/windows/projectm/0002-add-angle-to-GL-include-and-become-Win-working.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- a/src/libprojectM/Renderer/ShaderEngine.cpp -+++ b/src/libprojectM/Renderer/ShaderEngine.cpp -@@ -1226,7 +1226,7 @@ void ShaderEngine::reset() - - GLuint ShaderEngine::CompileShaderProgram(const std::string & VertexShaderCode, const std::string & FragmentShaderCode, const std::string & shaderTypeString){ - --#if defined(WIN32) && !defined(EYETUNE_WINRT) -+#if defined(WIN32) && !defined(EYETUNE_WINRT) && !defined(HAS_ANGLE) - GLenum err = glewInit(); - #endif /** WIN32 */ - ---- a/src/libprojectM/projectM-opengl.h -+++ b/src/libprojectM/projectM-opengl.h -@@ -32,8 +32,12 @@ - #elif defined(_WIN32) - #define GLM_FORCE_CXX03 - # include -+#if defined(HAS_ANGLE) -+#include -+#else - #include "glew.h" - #include "wglew.h" -+#endif - #else /* linux/unix/other */ - # ifdef USE_GLES - # include diff --git a/depends/windows/projectm/0003-change-SOIL2-to-use-on-angle.patch b/depends/windows/projectm/0003-change-SOIL2-to-use-on-angle.patch deleted file mode 100644 index b2dcdc6..0000000 --- a/depends/windows/projectm/0003-change-SOIL2-to-use-on-angle.patch +++ /dev/null @@ -1,56 +0,0 @@ ---- a/src/libprojectM/Renderer/SOIL2/SOIL2.c -+++ b/src/libprojectM/Renderer/SOIL2/SOIL2.c -@@ -33,7 +33,7 @@ - #define SOIL_X11_PLATFORM - #endif - --#if ( defined( SOIL_PLATFORM_IOS ) || defined( SOIL_PLATFORM_ANDROID ) ) && ( !defined( SOIL_GLES1 ) && !defined( SOIL_GLES2 ) ) -+#if ( defined(HAS_ANGLE) || defined( SOIL_PLATFORM_IOS ) || defined( SOIL_PLATFORM_ANDROID ) ) && ( !defined( SOIL_GLES1 ) && !defined( SOIL_GLES2 ) ) - #define SOIL_GLES2 - #endif - -@@ -41,7 +41,12 @@ - #include - #endif - --#if defined( SOIL_GLES2 ) -+#if defined(HAS_ANGLE) -+ #include -+ #ifndef APIENTRY -+ #define APIENTRY GL_APIENTRY -+ #endif -+#elif defined( SOIL_GLES2 ) - #ifdef SOIL_PLATFORM_IOS - #include - #include -@@ -2793,12 +2798,22 @@ int query_cubemap_capability( void ) - if( has_cubemap_capability == SOIL_CAPABILITY_UNKNOWN ) - { - /* we haven't yet checked for the capability, do so */ -+#if defined( SOIL_PLATFORM_IOS ) -+ /* iOS give for cubemap nothing and seems to be not supported, but by test it was usable! */ -+ has_cubemap_capability = SOIL_CAPABILITY_PRESENT; -+#else - if( - (0 == SOIL_GL_ExtensionSupported( - "GL_ARB_texture_cube_map" ) ) -+ && -+ (0 == SOIL_GL_ExtensionSupported( -+ "GL_ARB_texture_cube_map_array" ) ) - && - (0 == SOIL_GL_ExtensionSupported( - "GL_EXT_texture_cube_map" ) ) -+ && -+ (0 == SOIL_GL_ExtensionSupported( -+ "GL_EXT_texture_cube_map_array" ) ) - ) - { - /* not there, flag the failure */ -@@ -2808,6 +2823,7 @@ int query_cubemap_capability( void ) - /* it's there! */ - has_cubemap_capability = SOIL_CAPABILITY_PRESENT; - } -+#endif - } - /* let the user know if we can do cubemaps or not */ - return has_cubemap_capability; diff --git a/depends/windows/projectm/CMakeLists.txt b/depends/windows/projectm/CMakeLists.txt deleted file mode 100644 index 1983fe7..0000000 --- a/depends/windows/projectm/CMakeLists.txt +++ /dev/null @@ -1,209 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(libprojectM) - -find_package(kodi-angle REQUIRED) -get_target_property(OPENGLES_INCLUDE_DIRS kodi::angle::libGLESv2 INTERFACE_INCLUDE_DIRECTORIES) - -set(DATADIR "${CMAKE_INSTALL_PREFIX}/share") -configure_file(${PROJECT_SOURCE_DIR}/src/libprojectM/config.inp.in ${PROJECT_SOURCE_DIR}/src/libprojectM/config.inp @ONLY) - -set(SOURCES src/libprojectM/ConfigFile.cpp - src/libprojectM/fftsg.cpp - src/libprojectM/FileScanner.cpp - src/libprojectM/KeyHandler.cpp - src/libprojectM/PCM.cpp - src/libprojectM/PipelineMerger.cpp - src/libprojectM/PresetChooser.cpp - src/libprojectM/Preset.cpp - src/libprojectM/PresetFactory.cpp - src/libprojectM/PresetFactoryManager.cpp - src/libprojectM/PresetLoader.cpp - src/libprojectM/projectM.cpp - src/libprojectM/TestRunner.cpp - src/libprojectM/TimeKeeper.cpp - src/libprojectM/timer.cpp - src/libprojectM/wipemalloc.cpp - src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.cpp - src/libprojectM/MilkdropPresetFactory/BuiltinParams.cpp - src/libprojectM/MilkdropPresetFactory/CustomShape.cpp - src/libprojectM/MilkdropPresetFactory/CustomWave.cpp - src/libprojectM/MilkdropPresetFactory/Eval.cpp - src/libprojectM/MilkdropPresetFactory/Expr.cpp - src/libprojectM/MilkdropPresetFactory/Func.cpp - src/libprojectM/MilkdropPresetFactory/IdlePreset.cpp - src/libprojectM/MilkdropPresetFactory/InitCond.cpp - src/libprojectM/MilkdropPresetFactory/MilkdropPreset.cpp - src/libprojectM/MilkdropPresetFactory/MilkdropPresetFactory.cpp - src/libprojectM/MilkdropPresetFactory/Param.cpp - src/libprojectM/MilkdropPresetFactory/Parser.cpp - src/libprojectM/MilkdropPresetFactory/PerFrameEqn.cpp - src/libprojectM/MilkdropPresetFactory/PerPixelEqn.cpp - src/libprojectM/MilkdropPresetFactory/PerPointEqn.cpp - src/libprojectM/MilkdropPresetFactory/PresetFrameIO.cpp - src/libprojectM/NativePresetFactory/NativePresetFactory.cpp - src/libprojectM/Renderer/BeatDetect.cpp - src/libprojectM/Renderer/Filters.cpp - src/libprojectM/Renderer/MilkdropWaveform.cpp - src/libprojectM/Renderer/PerlinNoise.cpp - src/libprojectM/Renderer/PerlinNoiseWithAlpha.cpp - src/libprojectM/Renderer/PerPixelMesh.cpp - src/libprojectM/Renderer/PipelineContext.cpp - src/libprojectM/Renderer/Pipeline.cpp - src/libprojectM/Renderer/Renderable.cpp - src/libprojectM/Renderer/Renderer.cpp - src/libprojectM/Renderer/RenderItemDistanceMetric.cpp - src/libprojectM/Renderer/RenderItemMatcher.cpp - src/libprojectM/Renderer/Shader.cpp - src/libprojectM/Renderer/ShaderEngine.cpp - src/libprojectM/Renderer/StaticGlShaders.cpp - src/libprojectM/Renderer/Texture.cpp - src/libprojectM/Renderer/TextureManager.cpp - src/libprojectM/Renderer/VideoEcho.cpp - src/libprojectM/Renderer/Waveform.cpp - src/libprojectM/Renderer/SOIL2/etc1_utils.c - src/libprojectM/Renderer/SOIL2/image_DXT.c - src/libprojectM/Renderer/SOIL2/image_helper.c - src/libprojectM/Renderer/SOIL2/SOIL2.c - src/libprojectM/Renderer/hlslparser/src/CodeWriter.cpp - src/libprojectM/Renderer/hlslparser/src/Engine.cpp - src/libprojectM/Renderer/hlslparser/src/GLSLGenerator.cpp - src/libprojectM/Renderer/hlslparser/src/HLSLParser.cpp - src/libprojectM/Renderer/hlslparser/src/HLSLTokenizer.cpp - src/libprojectM/Renderer/hlslparser/src/HLSLTree.cpp) - -set(HEADERS src/libprojectM/BackgroundWorker.h - src/libprojectM/carbontoprojectM.h - src/libprojectM/cocoatoprojectM.h - src/libprojectM/ConfigFile.h - src/libprojectM/dlldefs.h - src/libprojectM/event.h - src/libprojectM/fatal.h - src/libprojectM/fftsg.h - src/libprojectM/FileScanner.hpp - src/libprojectM/glError.h - src/libprojectM/lvtoprojectM.h - src/libprojectM/projectM-opengl.h - src/libprojectM/resource.h - src/libprojectM/sdltoprojectM.h - src/libprojectM/timer.h - src/libprojectM/wipemalloc.h - src/libprojectM/Common.hpp - src/libprojectM/HungarianMethod.hpp - src/libprojectM/IdleTextures.hpp - src/libprojectM/KeyHandler.hpp - src/libprojectM/PCM.hpp - src/libprojectM/PipelineMerger.hpp - src/libprojectM/PresetChooser.hpp - src/libprojectM/PresetFactory.hpp - src/libprojectM/PresetFactoryManager.hpp - src/libprojectM/Preset.hpp - src/libprojectM/PresetLoader.hpp - src/libprojectM/projectM.hpp - src/libprojectM/RandomNumberGenerators.hpp - src/libprojectM/TestRunner.hpp - src/libprojectM/TimeKeeper.hpp - src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.hpp - src/libprojectM/MilkdropPresetFactory/BuiltinParams.hpp - src/libprojectM/MilkdropPresetFactory/CustomShape.hpp - src/libprojectM/MilkdropPresetFactory/CustomWave.hpp - src/libprojectM/MilkdropPresetFactory/CValue.hpp - src/libprojectM/MilkdropPresetFactory/Eval.hpp - src/libprojectM/MilkdropPresetFactory/Expr.hpp - src/libprojectM/MilkdropPresetFactory/Func.hpp - src/libprojectM/MilkdropPresetFactory/IdlePreset.hpp - src/libprojectM/MilkdropPresetFactory/InitCond.hpp - src/libprojectM/MilkdropPresetFactory/InitCondUtils.hpp - src/libprojectM/MilkdropPresetFactory/JitContext.hpp - src/libprojectM/MilkdropPresetFactory/MilkdropPresetFactory.hpp - src/libprojectM/MilkdropPresetFactory/MilkdropPreset.hpp - src/libprojectM/MilkdropPresetFactory/Param.hpp - src/libprojectM/MilkdropPresetFactory/ParamUtils.hpp - src/libprojectM/MilkdropPresetFactory/Parser.hpp - src/libprojectM/MilkdropPresetFactory/PerFrameEqn.hpp - src/libprojectM/MilkdropPresetFactory/PerPixelEqn.hpp - src/libprojectM/MilkdropPresetFactory/PerPointEqn.hpp - src/libprojectM/MilkdropPresetFactory/PresetFrameIO.hpp - src/libprojectM/NativePresetFactory/MilkdropCompatability.hpp - src/libprojectM/NativePresetFactory/NativePresetFactory.hpp - src/libprojectM/NativePresetFactory/NativePreset.hpp - src/libprojectM/Renderer/BeatDetect.hpp - src/libprojectM/Renderer/Filters.hpp - src/libprojectM/Renderer/MilkdropWaveform.hpp - src/libprojectM/Renderer/PerlinNoise.hpp - src/libprojectM/Renderer/PerlinNoiseWithAlpha.hpp - src/libprojectM/Renderer/PerPixelMesh.hpp - src/libprojectM/Renderer/PipelineContext.hpp - src/libprojectM/Renderer/Pipeline.hpp - src/libprojectM/Renderer/Renderable.hpp - src/libprojectM/Renderer/Renderer.hpp - src/libprojectM/Renderer/RenderItemDistanceMetric.hpp - src/libprojectM/Renderer/RenderItemMatcher.hpp - src/libprojectM/Renderer/RenderItemMergeFunction.hpp - src/libprojectM/Renderer/ShaderEngine.hpp - src/libprojectM/Renderer/Shader.hpp - src/libprojectM/Renderer/StaticGlShaders.h - src/libprojectM/Renderer/Texture.hpp - src/libprojectM/Renderer/TextureManager.hpp - src/libprojectM/Renderer/Transformation.hpp - src/libprojectM/Renderer/VideoEcho.hpp - src/libprojectM/Renderer/Waveform.hpp - src/libprojectM/Renderer/SOIL2/etc1_utils.h - src/libprojectM/Renderer/SOIL2/image_DXT.h - src/libprojectM/Renderer/SOIL2/image_helper.h - src/libprojectM/Renderer/SOIL2/pkm_helper.h - src/libprojectM/Renderer/SOIL2/pvr_helper.h - src/libprojectM/Renderer/SOIL2/SOIL2.h - src/libprojectM/Renderer/SOIL2/stbi_DDS_c.h - src/libprojectM/Renderer/SOIL2/stbi_DDS.h - src/libprojectM/Renderer/SOIL2/stbi_ext_c.h - src/libprojectM/Renderer/SOIL2/stbi_ext.h - src/libprojectM/Renderer/SOIL2/stb_image.h - src/libprojectM/Renderer/SOIL2/stb_image_write.h - src/libprojectM/Renderer/SOIL2/stbi_pkm_c.h - src/libprojectM/Renderer/SOIL2/stbi_pkm.h - src/libprojectM/Renderer/SOIL2/stbi_pvr_c.h - src/libprojectM/Renderer/SOIL2/stbi_pvr.h - src/libprojectM/Renderer/hlslparser/src/CodeWriter.h - src/libprojectM/Renderer/hlslparser/src/Engine.h - src/libprojectM/Renderer/hlslparser/src/GLSLGenerator.h - src/libprojectM/Renderer/hlslparser/src/HLSLParser.h - src/libprojectM/Renderer/hlslparser/src/HLSLTokenizer.h - src/libprojectM/Renderer/hlslparser/src/HLSLTree.h - src/libprojectM/omptl/omptl_algorithm_par.h - src/libprojectM/omptl/omptl_algorithm_ser.h - src/libprojectM/omptl/omptl_numeric_extentions.h - src/libprojectM/omptl/omptl_numeric_extentions_par.h - src/libprojectM/omptl/omptl_numeric_extentions_ser.h - src/libprojectM/omptl/omptl_numeric_par.h - src/libprojectM/omptl/omptl_numeric_ser.h - src/libprojectM/omptl/omptl_tools.h) - -add_library(projectM STATIC ${SOURCES} ${HEADERS}) -set_property(TARGET projectM PROPERTY POSITION_INDEPENDENT_CODE ON) -target_include_directories(projectM PRIVATE ${PROJECT_SOURCE_DIR} - ${PROJECT_SOURCE_DIR}/src/libprojectM - ${PROJECT_SOURCE_DIR}/src/libprojectM/MilkdropPresetFactory - ${PROJECT_SOURCE_DIR}/src/libprojectM/NativePresetFactory - ${PROJECT_SOURCE_DIR}/src/libprojectM/Renderer - ${PROJECT_SOURCE_DIR}/src/libprojectM/Renderer/hlslparser/src - ${OPENGLES_INCLUDE_DIRS}) -target_compile_definitions(projectM PRIVATE -DDATADIR_PATH="${CMAKE_INSTALL_PREFIX}/share" - -DUSE_GLES - -DHAS_ANGLE - -DprojectM_FONT_TITLE="Vera.ttf" - -DprojectM_FONT_MENU="VeraMono.ttf" - -DSOIL_NO_EGL) - -install(FILES ${PROJECT_SOURCE_DIR}/src/libprojectM/Common.hpp - ${PROJECT_SOURCE_DIR}/src/libprojectM/PCM.hpp - ${PROJECT_SOURCE_DIR}/src/libprojectM/dlldefs.h - ${PROJECT_SOURCE_DIR}/src/libprojectM/event.h - ${PROJECT_SOURCE_DIR}/src/libprojectM/fatal.h - ${PROJECT_SOURCE_DIR}/src/libprojectM/projectM.hpp - DESTINATION include/libprojectM) -install(FILES ${PROJECT_SOURCE_DIR}/src/libprojectM/config.inp - DESTINATION share/projectM) -install(DIRECTORY ${PROJECT_SOURCE_DIR}/fonts - ${PROJECT_SOURCE_DIR}/presets - DESTINATION share/projectM) -install(TARGETS projectM DESTINATION lib) diff --git a/depends/windows/projectm/deps.txt b/depends/windows/projectm/deps.txt index 0a8e601..c17fa57 100644 --- a/depends/windows/projectm/deps.txt +++ b/depends/windows/projectm/deps.txt @@ -1,4 +1,3 @@ angle glm -dirent dlfcn-win32 diff --git a/depends/windows/projectm/flags.txt b/depends/windows/projectm/flags.txt new file mode 100644 index 0000000..1fc0093 --- /dev/null +++ b/depends/windows/projectm/flags.txt @@ -0,0 +1 @@ +-DENABLE_GLES:BOOL=ON diff --git a/depends/windows/projectm/projectm.sha256 b/depends/windows/projectm/projectm.sha256 index 9199e60..06bca2b 100644 --- a/depends/windows/projectm/projectm.sha256 +++ b/depends/windows/projectm/projectm.sha256 @@ -1 +1 @@ -b6b99dde5c8f0822ae362606a0429628ee478f4ec943a156723841b742954707 +8d0206a369f172c7a66eb4acf8291f21a8ac20124a88f2865dc126e211e83a61 diff --git a/depends/windows/projectm/projectm.txt b/depends/windows/projectm/projectm.txt index c899503..d20913f 100644 --- a/depends/windows/projectm/projectm.txt +++ b/depends/windows/projectm/projectm.txt @@ -1 +1 @@ -projectm https://github.com/projectM-visualizer/projectm/releases/download/v3.1.12/projectM-3.1.12.tar.gz +projectm https://github.com/garbear/projectm/archive/e6bda8e744301f6395d4b4c8c5c77bfa9eae2598.tar.gz diff --git a/depends/windowsstore/dirent/dirent.sha256 b/depends/windowsstore/dirent/dirent.sha256 deleted file mode 100644 index 8e0b42c..0000000 --- a/depends/windowsstore/dirent/dirent.sha256 +++ /dev/null @@ -1 +0,0 @@ -4bcf07266f336bcd540fec5f75e90f027bd5081d3752f9ea5d408ef6ae30a897 diff --git a/depends/windowsstore/dirent/dirent.txt b/depends/windowsstore/dirent/dirent.txt deleted file mode 100644 index 7236da0..0000000 --- a/depends/windowsstore/dirent/dirent.txt +++ /dev/null @@ -1 +0,0 @@ -dirent https://github.com/tronkko/dirent/archive/1.23.2.zip diff --git a/depends/windowsstore/projectm/0001-Fix-build-with-Angle-on-Windows.patch b/depends/windowsstore/projectm/0001-Fix-build-with-Angle-on-Windows.patch new file mode 100644 index 0000000..66c1a20 --- /dev/null +++ b/depends/windowsstore/projectm/0001-Fix-build-with-Angle-on-Windows.patch @@ -0,0 +1,36 @@ +From 0dfc2502047990e53d2c9c046184cd06beef7624 Mon Sep 17 00:00:00 2001 +From: Garrett Brown +Date: Sat, 28 Feb 2026 19:55:58 -0800 +Subject: [PATCH] Fix build with Angle on Windows + +Error was: + + lib/cmake/projectM4/projectM4Config.cmake:34 (find_dependency) + Could NOT find OpenGL (missing: GLES3) +--- + src/libprojectM/projectM4Config.cmake.in | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/libprojectM/projectM4Config.cmake.in b/src/libprojectM/projectM4Config.cmake.in +index 0b1639b1..cdcefe55 100644 +--- a/src/libprojectM/projectM4Config.cmake.in ++++ b/src/libprojectM/projectM4Config.cmake.in +@@ -6,8 +6,13 @@ include(CMakeFindDependencyMacro) + + if(NOT "@ENABLE_EMSCRIPTEN@") # ENABLE_EMSCRIPTEN + if("@ENABLE_GLES@") # ENABLE_GLES +- list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") +- find_dependency(OpenGL COMPONENTS GLES3) ++ # On Windows desktop we may be using ANGLE/EGL for GLES. ++ # CMake's FindOpenGL(GLES3) generally fails or conflicts, so don't ++ # import an OpenGL dependency from this package config. ++ if(NOT WIN32) ++ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") ++ find_dependency(OpenGL COMPONENTS GLES3) ++ endif() + else() + find_dependency(OpenGL) + endif() +-- +2.52.0 + diff --git a/depends/windowsstore/projectm/0001-kodi-cmake-fixes.patch b/depends/windowsstore/projectm/0001-kodi-cmake-fixes.patch deleted file mode 100644 index 928d13c..0000000 --- a/depends/windowsstore/projectm/0001-kodi-cmake-fixes.patch +++ /dev/null @@ -1,133 +0,0 @@ ---- /dev/null -+++ b/config.h -@@ -0,0 +1,105 @@ -+/* config.h. Generated from config.h.in by configure. */ -+/* config.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define EMSCRIPTEN */ -+/* #undef EMSCRIPTEN */ -+ -+/* Define to 1 if you have the `aligned_alloc' function. */ -+#define HAVE_ALIGNED_ALLOC 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Defined if a valid OpenGL implementation is found. */ -+#define HAVE_GL 1 -+ -+/* Define to 1 if you have the header file. */ -+/* #undef HAVE_GLES_GL_H */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_GL_GL_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define HAVE_LLVM */ -+/* #undef HAVE_LLVM */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the header file. */ -+/* #undef HAVE_OPENGL_GL_H */ -+ -+/* Define to 1 if you have the `posix_memalign' function. */ -+#define HAVE_POSIX_MEMALIGN 1 -+ -+/* Have PTHREAD_PRIO_INHERIT. */ -+/* #undef HAVE_PTHREAD_PRIO_INHERIT */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_WINDOWS_H 1 -+ -+/* Define to the sub-directory where libtool stores uninstalled libraries. */ -+#define LT_OBJDIR ".libs/" -+ -+/* Name of package */ -+#define PACKAGE "projectM" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "mischa@mvstg.biz" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "projectM" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "projectM 3.1.7" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "projectM" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "https://github.com/projectM-visualizer/projectm/" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.1.7" -+ -+/* Define to necessary symbol if this constant uses a non-standard name on -+ your system. */ -+/* #undef PTHREAD_CREATE_JOINABLE */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define USE_GLES */ -+/* #undef USE_GLES */ -+ -+/* Define USE_THREADS */ -+#define USE_THREADS 1 -+ -+/* Version number of package */ -+#define VERSION "3.1.7" -+ -+/* Define to 1 if the X Window System is missing or not being used. */ -+#define X_DISPLAY_MISSING 1 ---- /dev/null -+++ b/src/libprojectM/config.inp.in -@@ -0,0 +1,22 @@ -+# config.inp -+# Configuration File for projectM -+ -+#Texture Size = 1024 # Size of internal rendering texture -+ -+Mesh X = 220 # Width of PerPixel Equation mesh -+Mesh Y = 125 # Height of PerPixel Equation mesh -+FPS = 35 # Frames Per Second -+Fullscreen = false -+Window Width = 512 # startup window width -+Window Height = 512 # startup window height -+ -+Smooth Transition Duration = 5 # in seconds -+Preset Duration = 30 # in seconds -+Easter Egg Parameter = 1 -+ -+Hard Cut Sensitivity = 10 # Lower to make hard cuts more frequent -+Aspect Correction = true # Custom Shape Aspect Correction -+ -+Preset Path = @DATADIR@/projectM/presets # preset location -+Title Font = Vera.ttf -+Menu Font = VeraMono.ttf diff --git a/depends/windowsstore/projectm/0002-add-angle-to-GL-include-and-become-Win-working.patch b/depends/windowsstore/projectm/0002-add-angle-to-GL-include-and-become-Win-working.patch deleted file mode 100644 index be670f5..0000000 --- a/depends/windowsstore/projectm/0002-add-angle-to-GL-include-and-become-Win-working.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- a/src/libprojectM/Renderer/ShaderEngine.cpp -+++ b/src/libprojectM/Renderer/ShaderEngine.cpp -@@ -1226,7 +1226,7 @@ void ShaderEngine::reset() - - GLuint ShaderEngine::CompileShaderProgram(const std::string & VertexShaderCode, const std::string & FragmentShaderCode, const std::string & shaderTypeString){ - --#if defined(WIN32) && !defined(EYETUNE_WINRT) -+#if defined(WIN32) && !defined(EYETUNE_WINRT) && !defined(HAS_ANGLE) - GLenum err = glewInit(); - #endif /** WIN32 */ - ---- a/src/libprojectM/projectM-opengl.h -+++ b/src/libprojectM/projectM-opengl.h -@@ -32,8 +32,12 @@ - #elif defined(_WIN32) - #define GLM_FORCE_CXX03 - # include -+#if defined(HAS_ANGLE) -+#include -+#else - #include "glew.h" - #include "wglew.h" -+#endif - #else /* linux/unix/other */ - # ifdef USE_GLES - # include diff --git a/depends/windowsstore/projectm/0003-change-SOIL2-to-use-on-angle.patch b/depends/windowsstore/projectm/0003-change-SOIL2-to-use-on-angle.patch deleted file mode 100644 index b2dcdc6..0000000 --- a/depends/windowsstore/projectm/0003-change-SOIL2-to-use-on-angle.patch +++ /dev/null @@ -1,56 +0,0 @@ ---- a/src/libprojectM/Renderer/SOIL2/SOIL2.c -+++ b/src/libprojectM/Renderer/SOIL2/SOIL2.c -@@ -33,7 +33,7 @@ - #define SOIL_X11_PLATFORM - #endif - --#if ( defined( SOIL_PLATFORM_IOS ) || defined( SOIL_PLATFORM_ANDROID ) ) && ( !defined( SOIL_GLES1 ) && !defined( SOIL_GLES2 ) ) -+#if ( defined(HAS_ANGLE) || defined( SOIL_PLATFORM_IOS ) || defined( SOIL_PLATFORM_ANDROID ) ) && ( !defined( SOIL_GLES1 ) && !defined( SOIL_GLES2 ) ) - #define SOIL_GLES2 - #endif - -@@ -41,7 +41,12 @@ - #include - #endif - --#if defined( SOIL_GLES2 ) -+#if defined(HAS_ANGLE) -+ #include -+ #ifndef APIENTRY -+ #define APIENTRY GL_APIENTRY -+ #endif -+#elif defined( SOIL_GLES2 ) - #ifdef SOIL_PLATFORM_IOS - #include - #include -@@ -2793,12 +2798,22 @@ int query_cubemap_capability( void ) - if( has_cubemap_capability == SOIL_CAPABILITY_UNKNOWN ) - { - /* we haven't yet checked for the capability, do so */ -+#if defined( SOIL_PLATFORM_IOS ) -+ /* iOS give for cubemap nothing and seems to be not supported, but by test it was usable! */ -+ has_cubemap_capability = SOIL_CAPABILITY_PRESENT; -+#else - if( - (0 == SOIL_GL_ExtensionSupported( - "GL_ARB_texture_cube_map" ) ) -+ && -+ (0 == SOIL_GL_ExtensionSupported( -+ "GL_ARB_texture_cube_map_array" ) ) - && - (0 == SOIL_GL_ExtensionSupported( - "GL_EXT_texture_cube_map" ) ) -+ && -+ (0 == SOIL_GL_ExtensionSupported( -+ "GL_EXT_texture_cube_map_array" ) ) - ) - { - /* not there, flag the failure */ -@@ -2808,6 +2823,7 @@ int query_cubemap_capability( void ) - /* it's there! */ - has_cubemap_capability = SOIL_CAPABILITY_PRESENT; - } -+#endif - } - /* let the user know if we can do cubemaps or not */ - return has_cubemap_capability; diff --git a/depends/windowsstore/projectm/CMakeLists.txt b/depends/windowsstore/projectm/CMakeLists.txt deleted file mode 100644 index 1983fe7..0000000 --- a/depends/windowsstore/projectm/CMakeLists.txt +++ /dev/null @@ -1,209 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(libprojectM) - -find_package(kodi-angle REQUIRED) -get_target_property(OPENGLES_INCLUDE_DIRS kodi::angle::libGLESv2 INTERFACE_INCLUDE_DIRECTORIES) - -set(DATADIR "${CMAKE_INSTALL_PREFIX}/share") -configure_file(${PROJECT_SOURCE_DIR}/src/libprojectM/config.inp.in ${PROJECT_SOURCE_DIR}/src/libprojectM/config.inp @ONLY) - -set(SOURCES src/libprojectM/ConfigFile.cpp - src/libprojectM/fftsg.cpp - src/libprojectM/FileScanner.cpp - src/libprojectM/KeyHandler.cpp - src/libprojectM/PCM.cpp - src/libprojectM/PipelineMerger.cpp - src/libprojectM/PresetChooser.cpp - src/libprojectM/Preset.cpp - src/libprojectM/PresetFactory.cpp - src/libprojectM/PresetFactoryManager.cpp - src/libprojectM/PresetLoader.cpp - src/libprojectM/projectM.cpp - src/libprojectM/TestRunner.cpp - src/libprojectM/TimeKeeper.cpp - src/libprojectM/timer.cpp - src/libprojectM/wipemalloc.cpp - src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.cpp - src/libprojectM/MilkdropPresetFactory/BuiltinParams.cpp - src/libprojectM/MilkdropPresetFactory/CustomShape.cpp - src/libprojectM/MilkdropPresetFactory/CustomWave.cpp - src/libprojectM/MilkdropPresetFactory/Eval.cpp - src/libprojectM/MilkdropPresetFactory/Expr.cpp - src/libprojectM/MilkdropPresetFactory/Func.cpp - src/libprojectM/MilkdropPresetFactory/IdlePreset.cpp - src/libprojectM/MilkdropPresetFactory/InitCond.cpp - src/libprojectM/MilkdropPresetFactory/MilkdropPreset.cpp - src/libprojectM/MilkdropPresetFactory/MilkdropPresetFactory.cpp - src/libprojectM/MilkdropPresetFactory/Param.cpp - src/libprojectM/MilkdropPresetFactory/Parser.cpp - src/libprojectM/MilkdropPresetFactory/PerFrameEqn.cpp - src/libprojectM/MilkdropPresetFactory/PerPixelEqn.cpp - src/libprojectM/MilkdropPresetFactory/PerPointEqn.cpp - src/libprojectM/MilkdropPresetFactory/PresetFrameIO.cpp - src/libprojectM/NativePresetFactory/NativePresetFactory.cpp - src/libprojectM/Renderer/BeatDetect.cpp - src/libprojectM/Renderer/Filters.cpp - src/libprojectM/Renderer/MilkdropWaveform.cpp - src/libprojectM/Renderer/PerlinNoise.cpp - src/libprojectM/Renderer/PerlinNoiseWithAlpha.cpp - src/libprojectM/Renderer/PerPixelMesh.cpp - src/libprojectM/Renderer/PipelineContext.cpp - src/libprojectM/Renderer/Pipeline.cpp - src/libprojectM/Renderer/Renderable.cpp - src/libprojectM/Renderer/Renderer.cpp - src/libprojectM/Renderer/RenderItemDistanceMetric.cpp - src/libprojectM/Renderer/RenderItemMatcher.cpp - src/libprojectM/Renderer/Shader.cpp - src/libprojectM/Renderer/ShaderEngine.cpp - src/libprojectM/Renderer/StaticGlShaders.cpp - src/libprojectM/Renderer/Texture.cpp - src/libprojectM/Renderer/TextureManager.cpp - src/libprojectM/Renderer/VideoEcho.cpp - src/libprojectM/Renderer/Waveform.cpp - src/libprojectM/Renderer/SOIL2/etc1_utils.c - src/libprojectM/Renderer/SOIL2/image_DXT.c - src/libprojectM/Renderer/SOIL2/image_helper.c - src/libprojectM/Renderer/SOIL2/SOIL2.c - src/libprojectM/Renderer/hlslparser/src/CodeWriter.cpp - src/libprojectM/Renderer/hlslparser/src/Engine.cpp - src/libprojectM/Renderer/hlslparser/src/GLSLGenerator.cpp - src/libprojectM/Renderer/hlslparser/src/HLSLParser.cpp - src/libprojectM/Renderer/hlslparser/src/HLSLTokenizer.cpp - src/libprojectM/Renderer/hlslparser/src/HLSLTree.cpp) - -set(HEADERS src/libprojectM/BackgroundWorker.h - src/libprojectM/carbontoprojectM.h - src/libprojectM/cocoatoprojectM.h - src/libprojectM/ConfigFile.h - src/libprojectM/dlldefs.h - src/libprojectM/event.h - src/libprojectM/fatal.h - src/libprojectM/fftsg.h - src/libprojectM/FileScanner.hpp - src/libprojectM/glError.h - src/libprojectM/lvtoprojectM.h - src/libprojectM/projectM-opengl.h - src/libprojectM/resource.h - src/libprojectM/sdltoprojectM.h - src/libprojectM/timer.h - src/libprojectM/wipemalloc.h - src/libprojectM/Common.hpp - src/libprojectM/HungarianMethod.hpp - src/libprojectM/IdleTextures.hpp - src/libprojectM/KeyHandler.hpp - src/libprojectM/PCM.hpp - src/libprojectM/PipelineMerger.hpp - src/libprojectM/PresetChooser.hpp - src/libprojectM/PresetFactory.hpp - src/libprojectM/PresetFactoryManager.hpp - src/libprojectM/Preset.hpp - src/libprojectM/PresetLoader.hpp - src/libprojectM/projectM.hpp - src/libprojectM/RandomNumberGenerators.hpp - src/libprojectM/TestRunner.hpp - src/libprojectM/TimeKeeper.hpp - src/libprojectM/MilkdropPresetFactory/BuiltinFuncs.hpp - src/libprojectM/MilkdropPresetFactory/BuiltinParams.hpp - src/libprojectM/MilkdropPresetFactory/CustomShape.hpp - src/libprojectM/MilkdropPresetFactory/CustomWave.hpp - src/libprojectM/MilkdropPresetFactory/CValue.hpp - src/libprojectM/MilkdropPresetFactory/Eval.hpp - src/libprojectM/MilkdropPresetFactory/Expr.hpp - src/libprojectM/MilkdropPresetFactory/Func.hpp - src/libprojectM/MilkdropPresetFactory/IdlePreset.hpp - src/libprojectM/MilkdropPresetFactory/InitCond.hpp - src/libprojectM/MilkdropPresetFactory/InitCondUtils.hpp - src/libprojectM/MilkdropPresetFactory/JitContext.hpp - src/libprojectM/MilkdropPresetFactory/MilkdropPresetFactory.hpp - src/libprojectM/MilkdropPresetFactory/MilkdropPreset.hpp - src/libprojectM/MilkdropPresetFactory/Param.hpp - src/libprojectM/MilkdropPresetFactory/ParamUtils.hpp - src/libprojectM/MilkdropPresetFactory/Parser.hpp - src/libprojectM/MilkdropPresetFactory/PerFrameEqn.hpp - src/libprojectM/MilkdropPresetFactory/PerPixelEqn.hpp - src/libprojectM/MilkdropPresetFactory/PerPointEqn.hpp - src/libprojectM/MilkdropPresetFactory/PresetFrameIO.hpp - src/libprojectM/NativePresetFactory/MilkdropCompatability.hpp - src/libprojectM/NativePresetFactory/NativePresetFactory.hpp - src/libprojectM/NativePresetFactory/NativePreset.hpp - src/libprojectM/Renderer/BeatDetect.hpp - src/libprojectM/Renderer/Filters.hpp - src/libprojectM/Renderer/MilkdropWaveform.hpp - src/libprojectM/Renderer/PerlinNoise.hpp - src/libprojectM/Renderer/PerlinNoiseWithAlpha.hpp - src/libprojectM/Renderer/PerPixelMesh.hpp - src/libprojectM/Renderer/PipelineContext.hpp - src/libprojectM/Renderer/Pipeline.hpp - src/libprojectM/Renderer/Renderable.hpp - src/libprojectM/Renderer/Renderer.hpp - src/libprojectM/Renderer/RenderItemDistanceMetric.hpp - src/libprojectM/Renderer/RenderItemMatcher.hpp - src/libprojectM/Renderer/RenderItemMergeFunction.hpp - src/libprojectM/Renderer/ShaderEngine.hpp - src/libprojectM/Renderer/Shader.hpp - src/libprojectM/Renderer/StaticGlShaders.h - src/libprojectM/Renderer/Texture.hpp - src/libprojectM/Renderer/TextureManager.hpp - src/libprojectM/Renderer/Transformation.hpp - src/libprojectM/Renderer/VideoEcho.hpp - src/libprojectM/Renderer/Waveform.hpp - src/libprojectM/Renderer/SOIL2/etc1_utils.h - src/libprojectM/Renderer/SOIL2/image_DXT.h - src/libprojectM/Renderer/SOIL2/image_helper.h - src/libprojectM/Renderer/SOIL2/pkm_helper.h - src/libprojectM/Renderer/SOIL2/pvr_helper.h - src/libprojectM/Renderer/SOIL2/SOIL2.h - src/libprojectM/Renderer/SOIL2/stbi_DDS_c.h - src/libprojectM/Renderer/SOIL2/stbi_DDS.h - src/libprojectM/Renderer/SOIL2/stbi_ext_c.h - src/libprojectM/Renderer/SOIL2/stbi_ext.h - src/libprojectM/Renderer/SOIL2/stb_image.h - src/libprojectM/Renderer/SOIL2/stb_image_write.h - src/libprojectM/Renderer/SOIL2/stbi_pkm_c.h - src/libprojectM/Renderer/SOIL2/stbi_pkm.h - src/libprojectM/Renderer/SOIL2/stbi_pvr_c.h - src/libprojectM/Renderer/SOIL2/stbi_pvr.h - src/libprojectM/Renderer/hlslparser/src/CodeWriter.h - src/libprojectM/Renderer/hlslparser/src/Engine.h - src/libprojectM/Renderer/hlslparser/src/GLSLGenerator.h - src/libprojectM/Renderer/hlslparser/src/HLSLParser.h - src/libprojectM/Renderer/hlslparser/src/HLSLTokenizer.h - src/libprojectM/Renderer/hlslparser/src/HLSLTree.h - src/libprojectM/omptl/omptl_algorithm_par.h - src/libprojectM/omptl/omptl_algorithm_ser.h - src/libprojectM/omptl/omptl_numeric_extentions.h - src/libprojectM/omptl/omptl_numeric_extentions_par.h - src/libprojectM/omptl/omptl_numeric_extentions_ser.h - src/libprojectM/omptl/omptl_numeric_par.h - src/libprojectM/omptl/omptl_numeric_ser.h - src/libprojectM/omptl/omptl_tools.h) - -add_library(projectM STATIC ${SOURCES} ${HEADERS}) -set_property(TARGET projectM PROPERTY POSITION_INDEPENDENT_CODE ON) -target_include_directories(projectM PRIVATE ${PROJECT_SOURCE_DIR} - ${PROJECT_SOURCE_DIR}/src/libprojectM - ${PROJECT_SOURCE_DIR}/src/libprojectM/MilkdropPresetFactory - ${PROJECT_SOURCE_DIR}/src/libprojectM/NativePresetFactory - ${PROJECT_SOURCE_DIR}/src/libprojectM/Renderer - ${PROJECT_SOURCE_DIR}/src/libprojectM/Renderer/hlslparser/src - ${OPENGLES_INCLUDE_DIRS}) -target_compile_definitions(projectM PRIVATE -DDATADIR_PATH="${CMAKE_INSTALL_PREFIX}/share" - -DUSE_GLES - -DHAS_ANGLE - -DprojectM_FONT_TITLE="Vera.ttf" - -DprojectM_FONT_MENU="VeraMono.ttf" - -DSOIL_NO_EGL) - -install(FILES ${PROJECT_SOURCE_DIR}/src/libprojectM/Common.hpp - ${PROJECT_SOURCE_DIR}/src/libprojectM/PCM.hpp - ${PROJECT_SOURCE_DIR}/src/libprojectM/dlldefs.h - ${PROJECT_SOURCE_DIR}/src/libprojectM/event.h - ${PROJECT_SOURCE_DIR}/src/libprojectM/fatal.h - ${PROJECT_SOURCE_DIR}/src/libprojectM/projectM.hpp - DESTINATION include/libprojectM) -install(FILES ${PROJECT_SOURCE_DIR}/src/libprojectM/config.inp - DESTINATION share/projectM) -install(DIRECTORY ${PROJECT_SOURCE_DIR}/fonts - ${PROJECT_SOURCE_DIR}/presets - DESTINATION share/projectM) -install(TARGETS projectM DESTINATION lib) diff --git a/depends/windowsstore/projectm/deps.txt b/depends/windowsstore/projectm/deps.txt index 0a8e601..c17fa57 100644 --- a/depends/windowsstore/projectm/deps.txt +++ b/depends/windowsstore/projectm/deps.txt @@ -1,4 +1,3 @@ angle glm -dirent dlfcn-win32 diff --git a/depends/windowsstore/projectm/flags.txt b/depends/windowsstore/projectm/flags.txt new file mode 100644 index 0000000..1fc0093 --- /dev/null +++ b/depends/windowsstore/projectm/flags.txt @@ -0,0 +1 @@ +-DENABLE_GLES:BOOL=ON diff --git a/depends/windowsstore/projectm/projectm.sha256 b/depends/windowsstore/projectm/projectm.sha256 index 9199e60..85cb6de 100644 --- a/depends/windowsstore/projectm/projectm.sha256 +++ b/depends/windowsstore/projectm/projectm.sha256 @@ -1 +1 @@ -b6b99dde5c8f0822ae362606a0429628ee478f4ec943a156723841b742954707 +a8f1adfb1f77dce4a5bdbcd76dfe0ee5b2a7e01cad5b72ea4e914c8790772a11 diff --git a/depends/windowsstore/projectm/projectm.txt b/depends/windowsstore/projectm/projectm.txt index c899503..112a09e 100644 --- a/depends/windowsstore/projectm/projectm.txt +++ b/depends/windowsstore/projectm/projectm.txt @@ -1 +1 @@ -projectm https://github.com/projectM-visualizer/projectm/releases/download/v3.1.12/projectM-3.1.12.tar.gz +projectm https://github.com/garbear/projectm/archive/809b2f14a5ad364e81cc69ed55ab04eebfa4cc7a.tar.gz diff --git a/src/Main.cpp b/src/Main.cpp index 142713f..482d0a8 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -46,59 +46,89 @@ d4rk@xbmc.org // Called once when the visualisation is created by Kodi. Do any setup here. //----------------------------------------------------------------------------- CVisualizationProjectM::CVisualizationProjectM() - : m_projectM(nullptr), - m_UserPackFolder(false) { - m_configPM.meshX = gx; - m_configPM.meshY = gy; - m_configPM.fps = fps; - m_configPM.windowWidth = Width(); - m_configPM.windowHeight = Height(); - m_configPM.aspectCorrection = true; - m_configPM.easterEgg = 0.0; - m_configPM.titleFontURL = kodi::addon::GetAddonPath("resources/projectM/fonts/Vera.ttf"); - m_configPM.menuFontURL = kodi::addon::GetAddonPath("resources/projectM/fonts/VeraMono.ttf"); - m_configPM.datadir = kodi::addon::GetAddonPath("resources/projectM"); + if (!InitProjectM()) + { + return; + } + + projectm_set_mesh_size(m_projectM, gx, gy); + projectm_set_fps(m_projectM, fps); + projectm_set_window_size(m_projectM, Width(), Height()); + projectm_set_aspect_correction(m_projectM, true); + projectm_set_easter_egg(m_projectM, 0.0); + + auto texturePath = kodi::addon::GetAddonPath("resources/projectM/textures"); + std::vector texturePaths = {texturePath.data()}; + projectm_set_texture_search_paths(m_projectM, texturePaths.data(), texturePaths.size()); + m_lastPresetIdx = kodi::addon::GetSettingInt("last_preset_idx"); #ifdef DEBUG m_lastLoggedPresetIdx = m_lastPresetIdx; #endif - m_configPM.textureSize = kodi::addon::GetSettingInt("quality"); - m_configPM.shuffleEnabled = kodi::addon::GetSettingBoolean("shuffle"); + projectm_playlist_set_shuffle(m_playlist, kodi::addon::GetSettingBoolean("shuffle")); m_lastLockStatus = kodi::addon::GetSettingBoolean("last_locked_status"); - m_lastPresetDir = kodi::addon::GetSettingString("last_preset_folder"); - m_configPM.smoothPresetDuration = kodi::addon::GetSettingInt("smooth_duration"); - m_configPM.presetDuration = kodi::addon::GetSettingInt("preset_duration"); + m_presetDir = kodi::addon::GetSettingString("last_preset_folder"); + + projectm_set_soft_cut_duration(m_projectM, static_cast(kodi::addon::GetSettingFloat("smooth_duration"))); + projectm_set_preset_duration(m_projectM, static_cast(kodi::addon::GetSettingFloat("preset_duration"))); + projectm_set_beat_sensitivity(m_projectM, kodi::addon::GetSettingFloat("beat_sens")); ChoosePresetPack(kodi::addon::GetSettingInt("preset_pack")); ChooseUserPresetFolder(kodi::addon::GetSettingString("user_preset_folder")); - m_configPM.beatSensitivity = kodi::addon::GetSettingInt("beat_sens") * 2; -#ifndef _WIN32 - InitProjectM(); -#endif + // Populate playlist and set initial index + projectm_playlist_add_path(m_playlist, m_presetDir.c_str(), true, false); + + // If it is not the first run AND if this is the same preset pack as last time + if (kodi::addon::GetSettingString("last_preset_folder", "") == m_presetDir && m_lastPresetIdx > 0) + { + projectm_playlist_set_position(m_playlist, m_lastPresetIdx, true); + projectm_set_preset_locked(m_projectM, m_lastLockStatus); + } + else + { + // If it is the first run or a newly chosen preset pack we choose a random preset as first + if (projectm_playlist_size(m_playlist) > 0) + { + auto shuffleEnabled = projectm_playlist_get_shuffle(m_playlist); + projectm_playlist_set_shuffle(m_playlist, true); + projectm_playlist_play_next(m_playlist, false); + projectm_playlist_set_shuffle(m_playlist, shuffleEnabled); + } + } } CVisualizationProjectM::~CVisualizationProjectM() { - unsigned int lastindex = 0; - m_projectM->selectedPresetIndex(lastindex); m_shutdown = true; - kodi::addon::SetSettingInt("last_preset_idx", lastindex); - kodi::addon::SetSettingString("last_preset_folder", m_projectM->settings().presetURL); - kodi::addon::SetSettingBoolean("last_locked_status", m_projectM->isPresetLocked()); + + if (m_playlist && m_projectM) + { + auto lastindex = projectm_playlist_get_position(m_playlist); + kodi::addon::SetSettingInt("last_preset_idx", lastindex); + kodi::addon::SetSettingString("last_preset_folder", m_presetDir); + kodi::addon::SetSettingBoolean("last_locked_status", projectm_get_preset_locked(m_projectM)); + } + + if(m_playlist) + { + projectm_playlist_destroy(m_playlist); + m_playlist = nullptr; + } if (m_projectM) { - delete m_projectM; + projectm_destroy(m_projectM); m_projectM = nullptr; } } bool CVisualizationProjectM::Start(int channels, int samplesPerSec, int bitsPerSample, const std::string& songName) { + // Todo: Store channels, pass this value in AudioData() to projectM #ifdef _WIN32 InitProjectM(); @@ -120,7 +150,9 @@ void CVisualizationProjectM::AudioData(const float* pAudioData, size_t iAudioDat { std::unique_lock lock(m_pmMutex); if (m_projectM) - m_projectM->pcm()->addPCMfloat_2ch(pAudioData, iAudioDataLength); + { + projectm_pcm_add_float(m_projectM, pAudioData, iAudioDataLength / 2, PROJECTM_STEREO); + } } //-- Render ------------------------------------------------------------------- @@ -131,13 +163,12 @@ void CVisualizationProjectM::Render() std::unique_lock lock(m_pmMutex); if (m_projectM) { - m_projectM->renderFrame(); + projectm_opengl_render_frame(m_projectM); #ifdef DEBUG - unsigned preset; - m_projectM->selectedPresetIndex(preset); - if (m_lastLoggedPresetIdx != preset) - CLog::Log(ADDON_LOG_DEBUG,"PROJECTM - Changed preset to: %s",g_presets[preset]); - m_lastLoggedPresetIdx = preset; + auto preset = projectm_playlist_get_position(m_playlist); + if (m_lastLoggedPresetIdx != preset) + CLog::Log(ADDON_LOG_DEBUG,"PROJECTM - Changed preset to: %s",g_presets[preset]); + m_lastLoggedPresetIdx = preset; #endif } } @@ -145,18 +176,20 @@ void CVisualizationProjectM::Render() bool CVisualizationProjectM::LoadPreset(int select) { std::unique_lock lock(m_pmMutex); - m_projectM->selectPreset(select); + if (m_playlist) + { + projectm_playlist_set_position(m_playlist, select, true); + } return true; } bool CVisualizationProjectM::PrevPreset() { std::unique_lock lock(m_pmMutex); -// switchPreset(ALPHA_PREVIOUS, SOFT_CUT); - if (!m_projectM->isShuffleEnabled()) - m_projectM->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_p, PROJECTM_KMOD_CAPS); //ignore PROJECTM_KMOD_CAPS - else - m_projectM->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_r, PROJECTM_KMOD_CAPS); //ignore PROJECTM_KMOD_CAPS + if (m_playlist) + { + projectm_playlist_play_previous(m_playlist, false); + } return true; } @@ -164,29 +197,35 @@ bool CVisualizationProjectM::PrevPreset() bool CVisualizationProjectM::NextPreset() { std::unique_lock lock(m_pmMutex); -// switchPreset(ALPHA_NEXT, SOFT_CUT); - if (!m_projectM->isShuffleEnabled()) - m_projectM->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_n, PROJECTM_KMOD_CAPS); //ignore PROJECTM_KMOD_CAPS - else - m_projectM->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_r, PROJECTM_KMOD_CAPS); //ignore PROJECTM_KMOD_CAPS + if (m_playlist) + { + projectm_playlist_play_next(m_playlist, false); + } + return true; } bool CVisualizationProjectM::RandomPreset() { std::unique_lock lock(m_pmMutex); - m_projectM->setShuffleEnabled(m_configPM.shuffleEnabled); - return true; + if (m_playlist) + { + auto shuffleEnabled = projectm_playlist_get_shuffle(m_playlist); + projectm_playlist_set_shuffle(m_playlist, true); + projectm_playlist_play_next(m_playlist, false); + projectm_playlist_set_shuffle(m_playlist, shuffleEnabled); + } + return true; } bool CVisualizationProjectM::LockPreset(bool lockUnlock) { std::unique_lock lock(m_pmMutex); - m_projectM->setPresetLock(lockUnlock); - unsigned preset; - m_projectM->selectedPresetIndex(preset); - m_projectM->selectPreset(preset); - return true; + if (m_projectM) + { + projectm_set_preset_locked(m_projectM, lockUnlock); + } + return true; } //-- GetPresets --------------------------------------------------------------- @@ -195,13 +234,23 @@ bool CVisualizationProjectM::LockPreset(bool lockUnlock) bool CVisualizationProjectM::GetPresets(std::vector& presets) { std::unique_lock lock(m_pmMutex); - int numPresets = m_projectM ? m_projectM->getPlaylistSize() : 0; - if (numPresets > 0) + if (!m_playlist) + { + return false; + } + + char** playlistItems = projectm_playlist_items(m_playlist, 0, projectm_playlist_size(m_playlist)); + + char** item = playlistItems; + while (*item) { - for (unsigned i = 0; i < numPresets; i++) - presets.push_back(m_projectM->getPresetName(i)); + presets.push_back(GetBasename(*item)); + item++; } - return (numPresets > 0) ? true : false; + + projectm_playlist_free_string_array(playlistItems); + + return !presets.empty(); } //-- GetPreset ---------------------------------------------------------------- @@ -211,8 +260,10 @@ int CVisualizationProjectM::GetActivePreset() { unsigned preset; std::unique_lock lock(m_pmMutex); - if(m_projectM && m_projectM->selectedPresetIndex(preset)) - return preset; + if (m_playlist && projectm_playlist_get_position(m_playlist)) + { + return static_cast(projectm_playlist_get_position(m_playlist)); + } return 0; } @@ -223,49 +274,91 @@ int CVisualizationProjectM::GetActivePreset() bool CVisualizationProjectM::IsLocked() { std::unique_lock lock(m_pmMutex); - if(m_projectM) - return m_projectM->isPresetLocked(); + if (m_projectM) + { + return projectm_get_preset_locked(m_projectM); + } else + { return false; + } } //-- UpdateSetting ------------------------------------------------------------ // Handle setting change request from Kodi //----------------------------------------------------------------------------- -ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue) +ADDON_STATUS +CVisualizationProjectM::SetSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue) { if (settingName.empty() || settingValue.empty()) + { return ADDON_STATUS_UNKNOWN; + } { std::unique_lock lock(m_pmMutex); + if (!m_projectM || !m_playlist) + { + return ADDON_STATUS_UNKNOWN; + } + // It is now time to set the settings got from xmbc - if (settingName == "quality") - m_configPM.textureSize = settingValue.GetInt(); - else if (settingName == "shuffle") - m_configPM.shuffleEnabled = settingValue.GetBoolean(); + if (settingName == "shuffle") + { + projectm_playlist_set_shuffle(m_playlist, settingValue.GetBoolean()); + } else if (settingName == "last_preset_idx") + { m_lastPresetIdx = settingValue.GetInt(); + projectm_playlist_set_position(m_playlist, m_lastPresetIdx, false); + } else if (settingName == "last_locked_status") + { m_lastLockStatus = settingValue.GetBoolean(); + projectm_set_preset_locked(m_projectM, m_lastLockStatus); + } else if (settingName == "last_preset_folder") - m_lastPresetDir = settingValue.GetString(); + { + m_presetDir = settingValue.GetString(); + ReloadPlaylist(); + } else if (settingName == "smooth_duration") - m_configPM.smoothPresetDuration = (settingValue.GetInt() * 5 + 5); + { + projectm_set_soft_cut_duration(m_projectM, static_cast(settingValue.GetFloat())); + } else if (settingName == "preset_duration") - m_configPM.presetDuration = (settingValue.GetInt() * 5 + 5); + { + projectm_set_preset_duration(m_projectM, static_cast(settingValue.GetFloat())); + } else if (settingName == "preset_pack") + { ChoosePresetPack(settingValue.GetInt()); + if (kodi::addon::GetSettingString("last_preset_folder", "") != m_presetDir) + { + ReloadPlaylist(); + } + } else if (settingName == "user_preset_folder") + { ChooseUserPresetFolder(settingValue.GetString()); + if (kodi::addon::GetSettingString("last_preset_folder", "") != m_presetDir) + { + ReloadPlaylist(); + } + } else if (settingName == "beat_sens") - m_configPM.beatSensitivity = settingValue.GetInt() * 2; + { + projectm_set_beat_sensitivity(m_projectM, settingValue.GetFloat()); + } } if (settingName == "beat_sens" && !m_shutdown) // becomes changed in future by a additional value on function { - if (!InitProjectM()) //The last setting value is already set so we (re)initalize + if (!InitProjectM()) + { + // The last setting value is already set so we (re)initalize return ADDON_STATUS_UNKNOWN; + } } return ADDON_STATUS_OK; } @@ -273,21 +366,47 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, bool CVisualizationProjectM::InitProjectM() { std::unique_lock lock(m_pmMutex); - delete m_projectM; //We are re-initializing the engine + if (m_playlist) + { + projectm_playlist_connect(m_playlist, nullptr); + } + + if (m_projectM) + { + projectm_destroy(m_projectM); // We are re-initializing the engine + m_projectM = nullptr; + } + try { - m_projectM = new projectM(m_configPM); - if (m_configPM.presetURL == m_lastPresetDir) //If it is not the first run AND if this is the same preset pack as last time + + m_projectM = projectm_create(); + if (!m_projectM) + { + kodi::Log(ADDON_LOG_FATAL, "Could not create projectM instance."); + return false; + } + + if (!m_playlist) { - m_projectM->setPresetLock(m_lastLockStatus); - m_projectM->selectPreset(m_lastPresetIdx); + m_playlist = projectm_playlist_create(m_projectM); + if (!m_playlist) + { + projectm_destroy(m_projectM); + m_projectM = nullptr; + kodi::Log(ADDON_LOG_FATAL, "Could not create projectM playlist instance."); + return false; + } + + // Automatically update last preset index if it changes + projectm_playlist_set_preset_switched_event_callback(m_playlist, &CVisualizationProjectM::PresetSwitchedEvent, static_cast(this)); } else { - //If it is the first run or a newly chosen preset pack we choose a random preset as first - if (m_projectM->getPlaylistSize()) - m_projectM->selectPreset((rand() % (m_projectM->getPlaylistSize()))); + // Reconnect new instance with existing playlist manager + projectm_playlist_connect(m_playlist, m_projectM); } + return true; } catch (...) @@ -307,60 +426,61 @@ void CVisualizationProjectM::ChoosePresetPack(int pvalue) case 0: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_bltc201"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_bltc201"); break; case 1: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_milkdrop"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_milkdrop"); break; case 2: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_milkdrop_104"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_milkdrop_104"); break; case 3: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_milkdrop_200"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_milkdrop_200"); break; case 4: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_mischa_collection"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_mischa_collection"); break; case 5: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_projectM"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_projectM"); case 6: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_stock"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_stock"); break; case 7: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_tryptonaut"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_tryptonaut"); break; case 8: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_yin"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_yin"); break; case 9: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/tests"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/tests"); break; case 10: m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_eyetune"); + m_presetDir = kodi::addon::GetAddonPath("resources/projectM/presets/presets_eyetune"); break; default: - kodi::Log(ADDON_LOG_FATAL, "CVisualizationProjectM::%s: Should never called with unknown preset pack (%i)", __func__, pvalue); + kodi::Log(ADDON_LOG_FATAL, "CVisualizationProjectM::%s: Should never called with unknown preset pack (%i)", + __func__, pvalue); break; } } @@ -370,9 +490,48 @@ void CVisualizationProjectM::ChooseUserPresetFolder(std::string pvalue) if (m_UserPackFolder && !pvalue.empty()) { if (pvalue.back() == '/') - pvalue.erase(pvalue.length()-1,1); //Remove "/" from the end - m_configPM.presetURL = pvalue; + { + pvalue.erase(pvalue.length() - 1, 1); + } //Remove "/" from the end + m_presetDir = pvalue; + } +} + +std::string CVisualizationProjectM::GetBasename(std::string fullPath) +{ + auto lastSlash = fullPath.find_last_of("/\\"); + if (lastSlash != std::string::npos) + { + fullPath = fullPath.substr(lastSlash + 1); + } + + auto lastExt = fullPath.find_last_of("."); + if (lastExt != std::string::npos && lastExt != 0) + { + fullPath = fullPath.substr(0, lastExt); + } + + return fullPath; +} + +void CVisualizationProjectM::ReloadPlaylist() +{ + // Load new playlist and select a random preset + projectm_playlist_clear(m_playlist); + projectm_playlist_add_path(m_playlist, m_presetDir.c_str(), true, false); + if (projectm_playlist_size(m_playlist) > 0) + { + auto shuffleEnabled = projectm_playlist_get_shuffle(m_playlist); + projectm_playlist_set_shuffle(m_playlist, true); + projectm_playlist_play_next(m_playlist, true); + projectm_playlist_set_shuffle(m_playlist, shuffleEnabled); } } +void CVisualizationProjectM::PresetSwitchedEvent(bool isHardCut, unsigned int index, void* context) +{ + auto that = reinterpret_cast(context); + that->m_lastPresetIdx = static_cast(projectm_playlist_get_position(that->m_playlist)); +} + ADDONCREATOR(CVisualizationProjectM) diff --git a/src/Main.h b/src/Main.h index 71b6bf8..ada4d94 100644 --- a/src/Main.h +++ b/src/Main.h @@ -44,8 +44,10 @@ d4rk@xbmc.org #include #include +#include -#include +#include +#include class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, @@ -72,27 +74,29 @@ class ATTR_DLL_LOCAL CVisualizationProjectM bool InitProjectM(); void ChoosePresetPack(int pvalue); void ChooseUserPresetFolder(std::string pvalue); + std::string GetBasename(std::string fullPath); + void ReloadPlaylist(); + static void PresetSwitchedEvent(bool isHardCut, unsigned int index, void* context); - projectM* m_projectM; - projectM::Settings m_configPM; + projectm_handle m_projectM{nullptr}; + projectm_playlist_handle m_playlist{nullptr}; std::mutex m_pmMutex; - bool m_UserPackFolder; - std::string m_lastPresetDir; - int m_lastPresetIdx; + bool m_UserPackFolder{false}; + std::string m_presetDir; + std::atomic_int m_lastPresetIdx{}; #ifdef DEBUG - unsigned int m_lastLoggedPresetIdx; + unsigned int m_lastLoggedPresetIdx{}; #endif - bool m_lastLockStatus; - bool m_shutdown = false; + bool m_lastLockStatus{false}; + std::atomic_bool m_shutdown{false}; #ifdef _WIN32 bool m_presetsSet = false; #endif // some projectm globals - const static int maxSamples=512; - const static int texsize=512; - const static int gx=40,gy=30; - const static int fps=100; + const static int gx{40}; + const static int gy{30}; + const static int fps{60}; }; diff --git a/visualization.projectm/resources/settings.xml b/visualization.projectm/resources/settings.xml index 2e332f4..476f3e0 100644 --- a/visualization.projectm/resources/settings.xml +++ b/visualization.projectm/resources/settings.xml @@ -54,49 +54,37 @@ true - - 512 + + 3.0 - - - - - - - - - - - 10 - - 5 - 5 - 50 + 0.0 + 0.1 + 10.0 - - 30050 - + + false + - + 20 - 5 - 5 - 50 + 1.0 + 1.0 + 60.0 - - 30050 - + + false + - - 20 + + 1.0 - 0 - 10 - 100 + 0.0 + 0.05 + 2.0 - - 30051 + + false