From bb3428f88196b96e84514f44bfb2747345c2000e Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 31 May 2026 11:06:01 +0200 Subject: [PATCH 01/13] addon: Change used mutex to recursive_mutex Relates to comming changes. As the AI becomes not happy about comming "CVisualizationProjectM::PresetSwitchedEvent" without mutex, becomes it required to have a recursive_mutex as this callback function becomes called from main thread with CVisualizationProjectM::Render as base and where his called ProjectM function calls the callback on add-on. Without freeze the add-on and Kodi no more usable. During tests before was "mutex" two times called from main thread and one time from audio thread by "AudioData" call. --- src/Main.cpp | 24 ++++++++++++------------ src/Main.h | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index 053fd2ca..a3320c4d 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -98,7 +98,7 @@ bool CVisualizationProjectM::Init() //----------------------------------------------------------------------------- void CVisualizationProjectM::AudioData(const float* pAudioData, size_t iAudioDataLength) { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); if (m_projectM) m_projectM->pcm()->addPCMfloat_2ch(pAudioData, iAudioDataLength); } @@ -108,21 +108,21 @@ void CVisualizationProjectM::AudioData(const float* pAudioData, size_t iAudioDat //----------------------------------------------------------------------------- void CVisualizationProjectM::Render() { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); if (m_projectM) m_projectM->renderFrame(); } bool CVisualizationProjectM::LoadPreset(int select) { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); m_projectM->selectPreset(select); return true; } bool CVisualizationProjectM::PrevPreset() { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); // switchPreset(ALPHA_PREVIOUS, SOFT_CUT); if (!m_projectM->isShuffleEnabled()) m_projectM->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_p, @@ -136,7 +136,7 @@ bool CVisualizationProjectM::PrevPreset() bool CVisualizationProjectM::NextPreset() { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); // switchPreset(ALPHA_NEXT, SOFT_CUT); if (!m_projectM->isShuffleEnabled()) m_projectM->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_n, @@ -149,14 +149,14 @@ bool CVisualizationProjectM::NextPreset() bool CVisualizationProjectM::RandomPreset() { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); m_projectM->setShuffleEnabled(m_configPM.shuffleEnabled); return true; } bool CVisualizationProjectM::LockPreset(bool lockUnlock) { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); m_projectM->setPresetLock(lockUnlock); unsigned preset; m_projectM->selectedPresetIndex(preset); @@ -169,7 +169,7 @@ bool CVisualizationProjectM::LockPreset(bool lockUnlock) //----------------------------------------------------------------------------- bool CVisualizationProjectM::GetPresets(std::vector& presets) { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); int numPresets = m_projectM ? m_projectM->getPlaylistSize() : 0; if (numPresets > 0) { @@ -185,7 +185,7 @@ bool CVisualizationProjectM::GetPresets(std::vector& presets) int CVisualizationProjectM::GetActivePreset() { unsigned preset; - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); if (m_projectM && m_projectM->selectedPresetIndex(preset)) return preset; @@ -197,7 +197,7 @@ int CVisualizationProjectM::GetActivePreset() //----------------------------------------------------------------------------- bool CVisualizationProjectM::IsLocked() { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); if (m_projectM) return m_projectM->isPresetLocked(); else @@ -214,7 +214,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, return ADDON_STATUS_UNKNOWN; { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); // It is now time to set the settings got from xmbc if (settingName == "quality") @@ -249,7 +249,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, bool CVisualizationProjectM::InitProjectM() { - std::unique_lock lock(m_pmMutex); + std::unique_lock lock(m_pmMutex); delete m_projectM; //We are re-initializing the engine try { diff --git a/src/Main.h b/src/Main.h index e016d73b..a842ac71 100644 --- a/src/Main.h +++ b/src/Main.h @@ -74,7 +74,7 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, projectM* m_projectM; projectM::Settings m_configPM; - std::mutex m_pmMutex; + std::recursive_mutex m_pmMutex; bool m_UserPackFolder; std::string m_lastPresetDir; int m_lastPresetIdx; From e46d19c89b77c7274cdb9f20e887e3f914b42b61 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 31 May 2026 13:33:50 +0200 Subject: [PATCH 02/13] addon: Changed some settings to float --- src/Main.cpp | 12 +++--- visualization.projectm/resources/settings.xml | 40 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index a3320c4d..bb315d03 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -64,12 +64,12 @@ CVisualizationProjectM::CVisualizationProjectM() : m_projectM(nullptr), m_UserPa 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_configPM.smoothPresetDuration = static_cast(kodi::addon::GetSettingFloat("smooth_duration")); + m_configPM.presetDuration = static_cast(kodi::addon::GetSettingFloat("preset_duration")); ChoosePresetPack(kodi::addon::GetSettingInt("preset_pack")); ChooseUserPresetFolder(kodi::addon::GetSettingString("user_preset_folder")); - m_configPM.beatSensitivity = kodi::addon::GetSettingInt("beat_sens") * 2; + m_configPM.beatSensitivity = kodi::addon::GetSettingFloat("beat_sens"); } CVisualizationProjectM::~CVisualizationProjectM() @@ -228,15 +228,15 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, else if (settingName == "last_preset_folder") m_lastPresetDir = settingValue.GetString(); else if (settingName == "smooth_duration") - m_configPM.smoothPresetDuration = (settingValue.GetInt() * 5 + 5); + m_configPM.smoothPresetDuration = static_cast(settingValue.GetFloat()); else if (settingName == "preset_duration") - m_configPM.presetDuration = (settingValue.GetInt() * 5 + 5); + m_configPM.presetDuration = static_cast(settingValue.GetFloat()); else if (settingName == "preset_pack") ChoosePresetPack(settingValue.GetInt()); else if (settingName == "user_preset_folder") ChooseUserPresetFolder(settingValue.GetString()); else if (settingName == "beat_sens") - m_configPM.beatSensitivity = settingValue.GetInt() * 2; + m_configPM.beatSensitivity = settingValue.GetFloat(); } if (settingName == "beat_sens" && !m_shutdown) // becomes changed in future by a additional value on function diff --git a/visualization.projectm/resources/settings.xml b/visualization.projectm/resources/settings.xml index 2e332f4c..46e089c4 100644 --- a/visualization.projectm/resources/settings.xml +++ b/visualization.projectm/resources/settings.xml @@ -66,37 +66,37 @@ - - 10 + + 3.0 - 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 From fec7caa8f8f8a1d00a541c04fb901cdaa3148959 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 31 May 2026 12:06:34 +0200 Subject: [PATCH 03/13] addon: Cleanup "void CVisualizationProjectM::ChoosePresetPack(int pvalue)" Before was about needed preset URL every ID checked with a "switch (pvalue)". This now adds a map where makes more easy and smaller for changes in case used presets becomes updated in future. --- src/Main.cpp | 117 ++++++++++++++++++++------------------------------- 1 file changed, 45 insertions(+), 72 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index bb315d03..cf312308 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -42,6 +42,36 @@ d4rk@xbmc.org #include "Main.h" +#include + +namespace +{ + +struct preset_info +{ + std::string path; + uint32_t labelId; +}; + +constexpr int DEFAULT_PRESET = 5; + +// The preset packs that are installed with the add-on. +// The key is the value of the "preset_pack" setting in settings.xml +const std::unordered_map installed_presets = { + {0, {"resources/projectM/presets/presets_bltc201", 30020}}, + {1, {"resources/projectM/presets/presets_milkdrop", 30021}}, + {2, {"resources/projectM/presets/presets_milkdrop_104", 30022}}, + {3, {"resources/projectM/presets/presets_milkdrop_200", 30023}}, + {4, {"resources/projectM/presets/presets_mischa_collection", 30024}}, + {5, {"resources/projectM/presets/presets_projectM", 30025}}, + {6, {"resources/projectM/presets/presets_stock", 30026}}, + {7, {"resources/projectM/presets/presets_tryptonaut", 30027}}, + {8, {"resources/projectM/presets/presets_yin", 30028}}, + {9, {"resources/projectM/presets/tests", 30029}}, + {10, {"resources/projectM/presets/presets_eyetune", 30030}}}; + +} // namespace + //-- Create ------------------------------------------------------------------- // Called once when the visualisation is created by Kodi. Do any setup here. //----------------------------------------------------------------------------- @@ -277,80 +307,23 @@ bool CVisualizationProjectM::InitProjectM() void CVisualizationProjectM::ChoosePresetPack(int pvalue) { - switch (pvalue) + if (pvalue == -1) { - case -1: - m_UserPackFolder = true; - break; - - case 0: - m_UserPackFolder = false; - m_configPM.presetURL = - 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"); - break; - - case 2: - m_UserPackFolder = false; - m_configPM.presetURL = - 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"); - break; - - case 4: - m_UserPackFolder = false; - m_configPM.presetURL = - 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"); - - case 6: - m_UserPackFolder = false; - m_configPM.presetURL = 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"); - break; - - case 8: - m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/presets_yin"); - break; - - case 9: - m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath("resources/projectM/presets/tests"); - break; - - case 10: - m_UserPackFolder = false; - m_configPM.presetURL = - 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); - break; + m_UserPackFolder = true; + return; } + + const auto entry = installed_presets.find(pvalue); + if (entry == installed_presets.end()) + { + kodi::Log(ADDON_LOG_FATAL, + "CVisualizationProjectM::%s: Should never called with unknown preset pack (%i)", + __func__, pvalue); + return; + } + + m_UserPackFolder = false; + m_configPM.presetURL = kodi::addon::GetAddonPath(entry->second.path); } void CVisualizationProjectM::ChooseUserPresetFolder(std::string pvalue) From c26bc073a782f257cab537646ddc10565ca705ea Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 31 May 2026 12:30:13 +0200 Subject: [PATCH 04/13] addon: Make construction value set on header value --- src/Main.cpp | 5 +++-- src/Main.h | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index cf312308..371a5b9a 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -75,7 +75,7 @@ const std::unordered_map installed_presets = { //-- Create ------------------------------------------------------------------- // Called once when the visualisation is created by Kodi. Do any setup here. //----------------------------------------------------------------------------- -CVisualizationProjectM::CVisualizationProjectM() : m_projectM(nullptr), m_UserPackFolder(false) +CVisualizationProjectM::CVisualizationProjectM() { m_configPM.meshX = gx; m_configPM.meshY = gy; @@ -94,7 +94,8 @@ CVisualizationProjectM::CVisualizationProjectM() : m_projectM(nullptr), m_UserPa m_lastLockStatus = kodi::addon::GetSettingBoolean("last_locked_status"); m_lastPresetDir = kodi::addon::GetSettingString("last_preset_folder"); - m_configPM.smoothPresetDuration = static_cast(kodi::addon::GetSettingFloat("smooth_duration")); + m_configPM.smoothPresetDuration = + static_cast(kodi::addon::GetSettingFloat("smooth_duration")); m_configPM.presetDuration = static_cast(kodi::addon::GetSettingFloat("preset_duration")); ChoosePresetPack(kodi::addon::GetSettingInt("preset_pack")); diff --git a/src/Main.h b/src/Main.h index a842ac71..1c536f47 100644 --- a/src/Main.h +++ b/src/Main.h @@ -72,10 +72,11 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, void ChoosePresetPack(int pvalue); void ChooseUserPresetFolder(std::string pvalue); - projectM* m_projectM; + bool m_UserPackFolder{false}; + + projectM* m_projectM{nullptr}; projectM::Settings m_configPM; std::recursive_mutex m_pmMutex; - bool m_UserPackFolder; std::string m_lastPresetDir; int m_lastPresetIdx; bool m_lastLockStatus; From 837e3e37d3204f7d6a107317bae6f580d87d93f9 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 31 May 2026 17:11:19 +0200 Subject: [PATCH 05/13] addon: Move settings values into a own structure This done to have easier an overview what comes from add-on settings. Further are the names and the flow equal to settings.xml. NOTE: The only slithly bad part about is that few used values have a name starting with "last_*". Maybe we can look to rename they to have more matching to active and past time. --- src/Main.cpp | 221 ++++++++++++++++++++++++++++++++++++++++----------- src/Main.h | 22 ++++- 2 files changed, 192 insertions(+), 51 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index 371a5b9a..c5c7d719 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -77,6 +77,18 @@ const std::unordered_map installed_presets = { //----------------------------------------------------------------------------- CVisualizationProjectM::CVisualizationProjectM() { + // Load all available settings from add-on. + m_settings.preset_pack = kodi::addon::GetSettingInt("preset_pack"); + m_settings.user_preset_folder = kodi::addon::GetSettingString("user_preset_folder"); + m_settings.last_preset_folder = kodi::addon::GetSettingString("last_preset_folder"); + m_settings.last_preset_idx = kodi::addon::GetSettingInt("last_preset_idx"); + m_settings.last_locked_status = kodi::addon::GetSettingBoolean("last_locked_status"); + m_settings.shuffle = kodi::addon::GetSettingBoolean("shuffle"); + m_settings.quality = kodi::addon::GetSettingInt("quality"); + m_settings.smooth_duration = static_cast(kodi::addon::GetSettingFloat("smooth_duration")); + m_settings.preset_duration = static_cast(kodi::addon::GetSettingFloat("preset_duration")); + m_settings.beat_sens = kodi::addon::GetSettingFloat("beat_sens"); + m_configPM.meshX = gx; m_configPM.meshY = gy; m_configPM.fps = fps; @@ -87,20 +99,14 @@ CVisualizationProjectM::CVisualizationProjectM() 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"); - m_lastPresetIdx = kodi::addon::GetSettingInt("last_preset_idx"); - - m_configPM.textureSize = kodi::addon::GetSettingInt("quality"); - m_configPM.shuffleEnabled = kodi::addon::GetSettingBoolean("shuffle"); - - m_lastLockStatus = kodi::addon::GetSettingBoolean("last_locked_status"); - m_lastPresetDir = kodi::addon::GetSettingString("last_preset_folder"); - m_configPM.smoothPresetDuration = - static_cast(kodi::addon::GetSettingFloat("smooth_duration")); - m_configPM.presetDuration = static_cast(kodi::addon::GetSettingFloat("preset_duration")); - - ChoosePresetPack(kodi::addon::GetSettingInt("preset_pack")); - ChooseUserPresetFolder(kodi::addon::GetSettingString("user_preset_folder")); - m_configPM.beatSensitivity = kodi::addon::GetSettingFloat("beat_sens"); + m_configPM.textureSize = m_settings.quality; + m_configPM.shuffleEnabled = m_settings.shuffle; + m_configPM.smoothPresetDuration = static_cast(m_settings.smooth_duration); + m_configPM.presetDuration = static_cast(m_settings.preset_duration); + m_configPM.beatSensitivity = m_settings.beat_sens; + + ChoosePresetPack(m_settings.preset_pack); + ChooseUserPresetFolder(m_settings.user_preset_folder); } CVisualizationProjectM::~CVisualizationProjectM() @@ -242,39 +248,153 @@ 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); - - // 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(); - else if (settingName == "last_preset_idx") - m_lastPresetIdx = settingValue.GetInt(); - else if (settingName == "last_locked_status") - m_lastLockStatus = settingValue.GetBoolean(); - else if (settingName == "last_preset_folder") - m_lastPresetDir = settingValue.GetString(); - else if (settingName == "smooth_duration") - m_configPM.smoothPresetDuration = static_cast(settingValue.GetFloat()); - else if (settingName == "preset_duration") - m_configPM.presetDuration = static_cast(settingValue.GetFloat()); - else if (settingName == "preset_pack") - ChoosePresetPack(settingValue.GetInt()); - else if (settingName == "user_preset_folder") - ChooseUserPresetFolder(settingValue.GetString()); - else if (settingName == "beat_sens") - m_configPM.beatSensitivity = settingValue.GetFloat(); + return ADDON_STATUS_UNKNOWN; } - if (settingName == "beat_sens" && - !m_shutdown) // becomes changed in future by a additional value on function + + // Do only settings works if it is in process. In shutdown time makes no sense + // to reinitialize ProjectM again. + // This function becomes called on destruct as there are becomes some setting + // values stored in add-ons settings.xml. + if (!m_shutdown) { - if (!InitProjectM()) //The last setting value is already set so we (re)initalize - return ADDON_STATUS_UNKNOWN; + { + std::unique_lock lock(m_pmMutex); + + if (!m_projectM) + { + return ADDON_STATUS_UNKNOWN; + } + + // It is now time to set the settings got from xmbc + if (settingName == "preset_pack") + { + const int newValue = settingValue.GetInt(); + if (m_settings.preset_pack != newValue) + { + m_settingChanged = true; + + m_settings.preset_pack = newValue; + ChoosePresetPack(newValue); + } + } + else if (settingName == "user_preset_folder") + { + const std::string newValue = settingValue.GetString(); + if (m_settings.user_preset_folder != newValue && m_settings.preset_pack == -1) + { + m_settingChanged = true; + + m_settings.user_preset_folder = newValue; + ChooseUserPresetFolder(newValue); + } + } + else if (settingName == "last_preset_folder") + { + const std::string newValue = settingValue.GetString(); + if (m_settings.last_preset_folder != newValue) + { + m_settingChanged = true; + + m_settings.last_preset_folder = newValue; + } + } + else if (settingName == "last_preset_idx") + { + const int newValue = settingValue.GetInt(); + if (m_settings.last_preset_idx != newValue) + { + m_settingChanged = true; + + m_settings.last_preset_idx = newValue; + } + } + else if (settingName == "last_locked_status") + { + const bool newValue = settingValue.GetBoolean(); + if (m_settings.last_locked_status != newValue) + { + m_settingChanged = true; + + m_settings.last_locked_status = newValue; + } + } + else if (settingName == "shuffle") + { + const bool newValue = settingValue.GetBoolean(); + if (m_settings.shuffle != newValue) + { + m_settingChanged = true; + + m_settings.shuffle = newValue; + m_configPM.shuffleEnabled = m_settings.shuffle; + } + } + else if (settingName == "quality") + { + const int newValue = settingValue.GetInt(); + if (m_settings.last_preset_idx != newValue) + { + m_settingChanged = true; + + m_settings.quality = newValue; + m_configPM.textureSize = m_settings.quality; + } + } + else if (settingName == "smooth_duration") + { + const double newValue = static_cast(settingValue.GetFloat()); + if (m_settings.smooth_duration != newValue) + { + m_settingChanged = true; + + m_settings.smooth_duration = newValue; + m_configPM.smoothPresetDuration = static_cast(m_settings.smooth_duration); + } + } + else if (settingName == "preset_duration") + { + const double newValue = static_cast(settingValue.GetFloat()); + if (m_settings.preset_duration != newValue) + { + m_settingChanged = true; + + m_settings.preset_duration = newValue; + m_configPM.presetDuration = static_cast(m_settings.preset_duration); + } + } + else if (settingName == "beat_sens") + { + const float newValue = settingValue.GetFloat(); + if (m_settings.beat_sens != newValue) + { + m_settingChanged = true; + + m_settings.beat_sens = newValue; + m_configPM.beatSensitivity = m_settings.beat_sens; + } + } + } + + // becomes changed in future by a additional value on function, currently we + // use the last given value from settings.xml + // + // Check further about m_settingChanged, if something was changed, makes no + // sense to restart if nothing new. + if (settingName == "beat_sens" && m_settingChanged) + { + m_settingChanged = false; + + // The last setting value is already set so we (re)initalize + if (!InitProjectM()) + { + kodi::Log(ADDON_LOG_FATAL, + "Failed to reinitialize after settings change, screen rendering no more works."); + return ADDON_STATUS_UNKNOWN; + } + } } + return ADDON_STATUS_OK; } @@ -286,10 +406,11 @@ bool CVisualizationProjectM::InitProjectM() { 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_settings + .last_preset_folder) //If it is not the first run AND if this is the same preset pack as last time { - m_projectM->setPresetLock(m_lastLockStatus); - m_projectM->selectPreset(m_lastPresetIdx); + m_projectM->setPresetLock(m_settings.last_locked_status); + m_projectM->selectPreset(m_settings.last_preset_idx); } else { @@ -311,6 +432,7 @@ void CVisualizationProjectM::ChoosePresetPack(int pvalue) if (pvalue == -1) { m_UserPackFolder = true; + m_settings.preset_pack = -1; return; } @@ -324,7 +446,9 @@ void CVisualizationProjectM::ChoosePresetPack(int pvalue) } m_UserPackFolder = false; - m_configPM.presetURL = kodi::addon::GetAddonPath(entry->second.path); + m_settings.preset_pack = pvalue; + m_settings.last_preset_folder = kodi::addon::GetAddonPath(entry->second.path); + m_configPM.presetURL = m_settings.last_preset_folder } void CVisualizationProjectM::ChooseUserPresetFolder(std::string pvalue) @@ -333,7 +457,8 @@ void CVisualizationProjectM::ChooseUserPresetFolder(std::string pvalue) { if (pvalue.back() == '/') pvalue.erase(pvalue.length() - 1, 1); //Remove "/" from the end - m_configPM.presetURL = pvalue; + m_settings.last_preset_folder = pvalue; + m_configPM.presetURL = m_settings.last_preset_folder; } } diff --git a/src/Main.h b/src/Main.h index 1c536f47..90622ebf 100644 --- a/src/Main.h +++ b/src/Main.h @@ -42,6 +42,7 @@ d4rk@xbmc.org #pragma once +#include #include #include #include @@ -72,14 +73,29 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, void ChoosePresetPack(int pvalue); void ChooseUserPresetFolder(std::string pvalue); + bool m_settingChanged{true}; bool m_UserPackFolder{false}; + // Stored values where we get from settings.xml + // The name and order is identical to settings.xml. + // NOTE: Value last_preset_folder can be it a bit confusing, as it is in process the currently used preset folder. + struct + { + int preset_pack{-1}; + std::string user_preset_folder; + std::string last_preset_folder; + std::atomic_int last_preset_idx{}; + bool last_locked_status{false}; + bool shuffle{false}; + int quality{512}; + double smooth_duration{0}; + double preset_duration{0}; + float beat_sens{0}; + } m_settings; + projectM* m_projectM{nullptr}; projectM::Settings m_configPM; std::recursive_mutex m_pmMutex; - std::string m_lastPresetDir; - int m_lastPresetIdx; - bool m_lastLockStatus; bool m_shutdown = false; // some projectm globals From 22c236fd56be019cf35b9443ce186989295a8c89 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 31 May 2026 17:34:22 +0200 Subject: [PATCH 06/13] addon: swap projectM initialize from constructor to new Init function This done to have prepared for future API changes where add-on can return a init status to Kodi and inform add-on is usable or not. To make this then working for the new API must only the call from construction removed and the commented override uncommented. --- src/Main.cpp | 45 +++++++++++++++++++++++++-------------------- src/Main.h | 2 +- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index c5c7d719..2b16dc5a 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -72,10 +72,27 @@ const std::unordered_map installed_presets = { } // namespace -//-- Create ------------------------------------------------------------------- +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_projectM) + { + delete m_projectM; + m_projectM = nullptr; + } +} + +//-- Init ------------------------------------------------------------------- // Called once when the visualisation is created by Kodi. Do any setup here. //----------------------------------------------------------------------------- -CVisualizationProjectM::CVisualizationProjectM() + +bool CVisualizationProjectM::Init() { // Load all available settings from add-on. m_settings.preset_pack = kodi::addon::GetSettingInt("preset_pack"); @@ -107,27 +124,15 @@ CVisualizationProjectM::CVisualizationProjectM() ChoosePresetPack(m_settings.preset_pack); ChooseUserPresetFolder(m_settings.user_preset_folder); -} - -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_projectM) + if (!InitProjectM()) { - delete m_projectM; - m_projectM = nullptr; + kodi::Log(ADDON_LOG_FATAL, "Failed to initialize projectM - addon will not function"); + // Object is in invalid state - all subsequent method calls must check m_projectM/m_playlist + return false; } -} -bool CVisualizationProjectM::Init() -{ - return InitProjectM(); + return true; } //-- Audiodata ---------------------------------------------------------------- @@ -448,7 +453,7 @@ void CVisualizationProjectM::ChoosePresetPack(int pvalue) m_UserPackFolder = false; m_settings.preset_pack = pvalue; m_settings.last_preset_folder = kodi::addon::GetAddonPath(entry->second.path); - m_configPM.presetURL = m_settings.last_preset_folder + m_configPM.presetURL = m_settings.last_preset_folder; } void CVisualizationProjectM::ChooseUserPresetFolder(std::string pvalue) diff --git a/src/Main.h b/src/Main.h index 90622ebf..095b5dab 100644 --- a/src/Main.h +++ b/src/Main.h @@ -51,7 +51,7 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, public kodi::addon::CInstanceVisualization { public: - CVisualizationProjectM(); + CVisualizationProjectM() = default; ~CVisualizationProjectM() override; bool Init() override; From 047d05e4f711895f7ec95e9121c07d41843b7cb3 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 31 May 2026 17:35:05 +0200 Subject: [PATCH 07/13] addon: Use value m_shutdown as atomic to have more save --- src/Main.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Main.h b/src/Main.h index 095b5dab..5dc03337 100644 --- a/src/Main.h +++ b/src/Main.h @@ -96,7 +96,7 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, projectM* m_projectM{nullptr}; projectM::Settings m_configPM; std::recursive_mutex m_pmMutex; - bool m_shutdown = false; + std::atomic_bool m_shutdown{false}; // some projectm globals const static int maxSamples = 512; From 6d8a116a1efadce93f3c192f358c91ff2b831989 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Wed, 24 Jun 2026 21:09:54 +0200 Subject: [PATCH 08/13] addon/depends: Update addon to use the projectM 4.0 API --- CMakeLists.txt | 17 +- FindAngle.cmake | 23 + FindOpenGLES.cmake | 69 --- FindOpenGl.cmake | 41 -- FindProjectM.cmake | 60 --- Findglm.cmake | 25 -- ...ransitive-OpenGL-Boost-deps-in-CMake.patch | 39 ++ .../projectm/0001-fix-gl-compile-check.patch | 11 - .../projectm/0002-fix-clang-stdlib.patch | 14 - .../common/projectm/0003-mac-hack-fix.patch | 25 -- .../0004-fix-iOS-and-tvOS-GLES-include.patch | 45 -- depends/common/projectm/CMakeLists.txt | 21 - depends/common/projectm/flags.txt | 1 + depends/common/projectm/linux-deps.txt | 1 - depends/common/projectm/projectm.sha256 | 2 +- depends/common/projectm/projectm.txt | 2 +- src/Main.cpp | 419 ++++++++++++++---- src/Main.h | 19 +- visualization.projectm/resources/settings.xml | 2 + 19 files changed, 406 insertions(+), 430 deletions(-) create mode 100644 FindAngle.cmake delete mode 100644 FindOpenGLES.cmake delete mode 100644 FindOpenGl.cmake delete mode 100644 FindProjectM.cmake delete mode 100644 Findglm.cmake create mode 100644 depends/common/projectm/0001-Stop-exporting-transitive-OpenGL-Boost-deps-in-CMake.patch delete mode 100644 depends/common/projectm/0001-fix-gl-compile-check.patch delete mode 100644 depends/common/projectm/0002-fix-clang-stdlib.patch delete mode 100644 depends/common/projectm/0003-mac-hack-fix.patch delete mode 100644 depends/common/projectm/0004-fix-iOS-and-tvOS-GLES-include.patch delete mode 100644 depends/common/projectm/CMakeLists.txt create mode 100644 depends/common/projectm/flags.txt delete mode 100644 depends/common/projectm/linux-deps.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bcc7c04..f3b260b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,22 +4,9 @@ project(visualization.projectm) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) find_package(Kodi REQUIRED) -find_package(glm REQUIRED) -find_package(ProjectM REQUIRED) +find_package(projectM4 REQUIRED COMPONENTS Playlist) -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() - -list(APPEND DEPLIBS ${PROJECTM_LIBRARIES}) +set(DEPLIBS libprojectM::playlist) include_directories(${includes} ${PROJECTM_INCLUDE_DIRS} diff --git a/FindAngle.cmake b/FindAngle.cmake new file mode 100644 index 00000000..2db28eab --- /dev/null +++ b/FindAngle.cmake @@ -0,0 +1,23 @@ +#.rst: +# FindAngle +# ------------ +# Finds the Angle library +# +# As Angle brings a GLES support are the given values in GLES style. +# +# 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. + +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) diff --git a/FindOpenGLES.cmake b/FindOpenGLES.cmake deleted file mode 100644 index aaae6d0c..00000000 --- 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 67a6dc20..00000000 --- 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 a38ea7e7..00000000 --- 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 a21f4ea2..00000000 --- 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 00000000..b8328abb --- /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 e1678f15..00000000 --- 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 ff824d8b..00000000 --- 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/0003-mac-hack-fix.patch b/depends/common/projectm/0003-mac-hack-fix.patch deleted file mode 100644 index 421ec027..00000000 --- a/depends/common/projectm/0003-mac-hack-fix.patch +++ /dev/null @@ -1,25 +0,0 @@ -From dc764c765c61dcc8feb91834baa2c9ea7bd232d0 Mon Sep 17 00:00:00 2001 -From: Alwin Esch -Date: Sun, 24 May 2026 00:31:59 +0200 -Subject: [PATCH] Hack fix about macOS, as add-on link GL libs does it work - ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index a62e8df..dd0f9fe 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -37,7 +37,7 @@ AS_IF([test "x$enable_emscripten" = "xyes" || test "x$EMSCRIPTEN" = "xyes"], [ - enable_sdl=yes - ], [ - dnl Running in a normal OS (not emscripten) -- AX_CHECK_GL -+ # AX_CHECK_GL - - # check OS if mac or linux - AC_CANONICAL_HOST --- -2.39.5 (Apple Git-154) - diff --git a/depends/common/projectm/0004-fix-iOS-and-tvOS-GLES-include.patch b/depends/common/projectm/0004-fix-iOS-and-tvOS-GLES-include.patch deleted file mode 100644 index ff1c621e..00000000 --- a/depends/common/projectm/0004-fix-iOS-and-tvOS-GLES-include.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 3309fc80e5e3dd13e53a714f41ea154234c000e1 Mon Sep 17 00:00:00 2001 -From: Alwin Esch -Date: Sun, 24 May 2026 02:08:40 +0200 -Subject: [PATCH] fix iOS and tvOS GLES include - ---- - src/libprojectM/projectM-opengl.h | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/src/libprojectM/projectM-opengl.h b/src/libprojectM/projectM-opengl.h -index 001008c..9cb6d94 100644 ---- a/src/libprojectM/projectM-opengl.h -+++ b/src/libprojectM/projectM-opengl.h -@@ -18,8 +18,13 @@ - #define DUMP_SHADERS_ON_ERROR 0 - - #ifdef __APPLE__ --# include --# include -+# ifndef USE_GLES -+# include -+# include -+# else -+# include -+# include -+# endif - #elif defined(EYETUNE_WINRT) - #define GL_GLEXT_PROTOTYPES - #define GLM_FORCE_CXX03 -@@ -32,8 +37,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 --- -2.53.0 - diff --git a/depends/common/projectm/CMakeLists.txt b/depends/common/projectm/CMakeLists.txt deleted file mode 100644 index 97ea6680..00000000 --- a/depends/common/projectm/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 3.18) -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 00000000..e086127d --- /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 671b764c..00000000 --- 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 9199e60b..06bca2be 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 c8995033..d20913fa 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/src/Main.cpp b/src/Main.cpp index 2b16dc5a..92a24d26 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -74,17 +74,44 @@ const std::unordered_map installed_presets = { 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_projectM) { - delete m_projectM; - m_projectM = nullptr; + std::unique_lock lock(m_pmMutex); + + if (m_playlist && m_projectM) + { + // Remove our used callback about preset change event from ProjectM + projectm_playlist_set_preset_switched_event_callback(m_playlist, nullptr, nullptr); + + // Store the last used preset to have on next use. + auto lastindex = projectm_playlist_get_position(m_playlist); + kodi::addon::SetSettingInt("last_preset_idx", lastindex); + kodi::addon::SetSettingString("last_preset_folder", m_settings.last_preset_folder); + kodi::addon::SetSettingBoolean("last_locked_status", projectm_get_preset_locked(m_projectM)); + + // WARNING: Within the current projectM Version 4 we have a problem that if some processing parts about becomes changed, + // for example the preset, the screen becomes black after stop. + // Hopefully we find a way to fix this in future, but for now we have to avoid calls to ProjectM. + // + // NOTE: The problem comes after unload of the add-on library, not with destroy calls below. + // + // !!! Use this to reproduce the fault of black screen after stop !!! + //projectm_load_preset_file( + // m_projectM, "idle://Geiss & Sperl - Feedback (projectM idle HDR mix).milk", false); + } + + if (m_playlist) + { + projectm_playlist_destroy(m_playlist); + m_playlist = nullptr; + } + + if (m_projectM) + { + projectm_destroy(m_projectM); + m_projectM = nullptr; + } } } @@ -101,30 +128,10 @@ bool CVisualizationProjectM::Init() m_settings.last_preset_idx = kodi::addon::GetSettingInt("last_preset_idx"); m_settings.last_locked_status = kodi::addon::GetSettingBoolean("last_locked_status"); m_settings.shuffle = kodi::addon::GetSettingBoolean("shuffle"); - m_settings.quality = kodi::addon::GetSettingInt("quality"); m_settings.smooth_duration = static_cast(kodi::addon::GetSettingFloat("smooth_duration")); m_settings.preset_duration = static_cast(kodi::addon::GetSettingFloat("preset_duration")); m_settings.beat_sens = kodi::addon::GetSettingFloat("beat_sens"); - 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"); - m_configPM.textureSize = m_settings.quality; - m_configPM.shuffleEnabled = m_settings.shuffle; - m_configPM.smoothPresetDuration = static_cast(m_settings.smooth_duration); - m_configPM.presetDuration = static_cast(m_settings.preset_duration); - m_configPM.beatSensitivity = m_settings.beat_sens; - - ChoosePresetPack(m_settings.preset_pack); - ChooseUserPresetFolder(m_settings.user_preset_folder); - if (!InitProjectM()) { kodi::Log(ADDON_LOG_FATAL, "Failed to initialize projectM - addon will not function"); @@ -132,6 +139,82 @@ bool CVisualizationProjectM::Init() return false; } + 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); + + m_texturePath = kodi::addon::GetAddonPath("resources/projectM/textures"); + std::vector texturePaths = {m_texturePath.data()}; + projectm_set_texture_search_paths(m_projectM, texturePaths.data(), texturePaths.size()); + + projectm_playlist_set_shuffle(m_playlist, m_settings.shuffle); + projectm_set_soft_cut_duration(m_projectM, m_settings.smooth_duration); + projectm_set_preset_duration(m_projectM, m_settings.preset_duration); + projectm_set_beat_sensitivity(m_projectM, m_settings.beat_sens); + + // Store here the old to have after the following function calls available, as + // it can be changed there. + const std::string presetFolderBefore = m_settings.last_preset_folder; + + ChoosePresetPack(m_settings.preset_pack); + ChooseUserPresetFolder(m_settings.user_preset_folder); + + // Populate playlist and set initial index + uint32_t presetsAdded = + projectm_playlist_add_path(m_playlist, m_settings.last_preset_folder.c_str(), true, false); + if (presetsAdded == 0) + { + kodi::Log(ADDON_LOG_WARNING, "Init: Failed to load presets from: %s, falling back to default", + m_settings.last_preset_folder.c_str()); + + m_settings.last_preset_folder.clear(); + m_settings.last_preset_idx = 0; + m_settings.preset_pack = DEFAULT_PRESET; + ChoosePresetPack(m_settings.preset_pack); + + presetsAdded = + projectm_playlist_add_path(m_playlist, m_settings.last_preset_folder.c_str(), true, false); + if (presetsAdded == 0) + { + kodi::Log(ADDON_LOG_FATAL, + "Init: Failed to load default presets (where should always present) from: %s - " + "addon will not function", + m_settings.last_preset_folder.c_str()); + + return false; + } + } + + // If it is not the first run AND if this is the same preset pack as last time + if (presetFolderBefore == m_settings.last_preset_folder && m_settings.last_preset_idx > 0) + { + const auto playlistSize = projectm_playlist_size(m_playlist); + if (m_settings.last_preset_idx >= playlistSize) + { + kodi::Log(ADDON_LOG_ERROR, + "Init: Last selected preset index %i out of range of available presets %i, falling " + "back to first", + static_cast(m_settings.last_preset_idx), playlistSize); + m_settings.last_preset_idx = 0; + } + + projectm_playlist_set_position(m_playlist, m_settings.last_preset_idx, true); + projectm_set_preset_locked(m_projectM, m_settings.last_locked_status); + } + 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, true); + projectm_playlist_set_shuffle(m_playlist, shuffleEnabled); + } + } + return true; } @@ -142,7 +225,10 @@ 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, + static_cast(2)); + } } //-- Render ------------------------------------------------------------------- @@ -152,26 +238,28 @@ void CVisualizationProjectM::Render() { std::unique_lock lock(m_pmMutex); if (m_projectM) - m_projectM->renderFrame(); + { + projectm_opengl_render_frame(m_projectM); + } } 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; } @@ -179,30 +267,34 @@ 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); + 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); + if (m_projectM) + { + projectm_set_preset_locked(m_projectM, lockUnlock); + } return true; } @@ -212,13 +304,34 @@ 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)); + if (!playlistItems) { - for (unsigned i = 0; i < numPresets; i++) - presets.push_back(m_projectM->getPresetName(i)); + return false; } - return (numPresets > 0) ? true : false; + + try + { + char** item = playlistItems; + while (*item) + { + presets.push_back(GetBasename(*item)); + item++; + } + projectm_playlist_free_string_array(playlistItems); + } + catch (...) + { + projectm_playlist_free_string_array(playlistItems); + throw; + } + + return !presets.empty(); } //-- GetPreset ---------------------------------------------------------------- @@ -226,10 +339,11 @@ bool CVisualizationProjectM::GetPresets(std::vector& presets) //----------------------------------------------------------------------------- int CVisualizationProjectM::GetActivePreset() { - unsigned preset; std::unique_lock lock(m_pmMutex); - if (m_projectM && m_projectM->selectedPresetIndex(preset)) - return preset; + if (m_playlist) + { + return static_cast(projectm_playlist_get_position(m_playlist)); + } return 0; } @@ -241,9 +355,11 @@ bool CVisualizationProjectM::IsLocked() { std::unique_lock lock(m_pmMutex); if (m_projectM) - return m_projectM->isPresetLocked(); - else - return false; + { + return projectm_get_preset_locked(m_projectM); + } + + return false; } //-- UpdateSetting ------------------------------------------------------------ @@ -279,8 +395,12 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, { m_settingChanged = true; - m_settings.preset_pack = newValue; ChoosePresetPack(newValue); + if (kodi::addon::GetSettingString("last_preset_folder", "") != + m_settings.last_preset_folder) + { + ReloadPlaylist(); + } } } else if (settingName == "user_preset_folder") @@ -292,6 +412,21 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, m_settings.user_preset_folder = newValue; ChooseUserPresetFolder(newValue); + if (kodi::addon::GetSettingString("last_preset_folder", "") != + m_settings.last_preset_folder) + { + ReloadPlaylist(); + } + } + } + else if (settingName == "last_preset_folder") + { + const std::string newValue = settingValue.GetString(); + if (m_settings.last_preset_folder != newValue) + { + m_settingChanged = true; + + m_settings.last_preset_folder = newValue; } } else if (settingName == "last_preset_folder") @@ -302,6 +437,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, m_settingChanged = true; m_settings.last_preset_folder = newValue; + ReloadPlaylist(); } } else if (settingName == "last_preset_idx") @@ -312,6 +448,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, m_settingChanged = true; m_settings.last_preset_idx = newValue; + projectm_playlist_set_position(m_playlist, m_settings.last_preset_idx, false); } } else if (settingName == "last_locked_status") @@ -322,6 +459,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, m_settingChanged = true; m_settings.last_locked_status = newValue; + projectm_set_preset_locked(m_projectM, m_settings.last_locked_status); } } else if (settingName == "shuffle") @@ -332,18 +470,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, m_settingChanged = true; m_settings.shuffle = newValue; - m_configPM.shuffleEnabled = m_settings.shuffle; - } - } - else if (settingName == "quality") - { - const int newValue = settingValue.GetInt(); - if (m_settings.last_preset_idx != newValue) - { - m_settingChanged = true; - - m_settings.quality = newValue; - m_configPM.textureSize = m_settings.quality; + projectm_playlist_set_shuffle(m_playlist, m_settings.shuffle); } } else if (settingName == "smooth_duration") @@ -354,7 +481,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, m_settingChanged = true; m_settings.smooth_duration = newValue; - m_configPM.smoothPresetDuration = static_cast(m_settings.smooth_duration); + projectm_set_soft_cut_duration(m_projectM, m_settings.smooth_duration); } } else if (settingName == "preset_duration") @@ -365,7 +492,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, m_settingChanged = true; m_settings.preset_duration = newValue; - m_configPM.presetDuration = static_cast(m_settings.preset_duration); + projectm_set_preset_duration(m_projectM, m_settings.preset_duration); } } else if (settingName == "beat_sens") @@ -376,7 +503,7 @@ ADDON_STATUS CVisualizationProjectM::SetSetting(const std::string& settingName, m_settingChanged = true; m_settings.beat_sens = newValue; - m_configPM.beatSensitivity = m_settings.beat_sens; + projectm_set_beat_sensitivity(m_projectM, m_settings.beat_sens); } } } @@ -406,28 +533,79 @@ 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); + } + + projectm_handle oldProjectM = nullptr; + + if (m_projectM) + { + // We are re-initializing the engine, if fails fallback to old + oldProjectM = m_projectM; + m_projectM = nullptr; + } + try { - m_projectM = new projectM(m_configPM); - if (m_configPM.presetURL == - m_settings - .last_preset_folder) //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) { - m_projectM->setPresetLock(m_settings.last_locked_status); - m_projectM->selectPreset(m_settings.last_preset_idx); + if (!oldProjectM) + { + kodi::Log(ADDON_LOG_FATAL, "Could not create projectM instance."); + return false; + } + else + { + kodi::Log(ADDON_LOG_ERROR, + "Could not create new projectM instance, falling back to previous created one"); + m_projectM = oldProjectM; + } + } + + if (!m_playlist) + { + 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); + } + + if (oldProjectM) + { + projectm_destroy(oldProjectM); } + return true; } catch (...) { - kodi::Log(ADDON_LOG_FATAL, "exception in projectM ctor"); + if (!oldProjectM) + { + kodi::Log(ADDON_LOG_FATAL, "exception in projectM ctor"); + } + else + { + kodi::Log(ADDON_LOG_ERROR, + "exception in projectM ctor, falling back to previous created one"); + m_projectM = oldProjectM; + } return false; } } @@ -444,16 +622,14 @@ void CVisualizationProjectM::ChoosePresetPack(int pvalue) const auto entry = installed_presets.find(pvalue); if (entry == installed_presets.end()) { - kodi::Log(ADDON_LOG_FATAL, - "CVisualizationProjectM::%s: Should never called with unknown preset pack (%i)", - __func__, pvalue); + kodi::Log(ADDON_LOG_FATAL, "%s: Should never called with unknown preset pack (%i)", __func__, + pvalue); return; } m_UserPackFolder = false; m_settings.preset_pack = pvalue; m_settings.last_preset_folder = kodi::addon::GetAddonPath(entry->second.path); - m_configPM.presetURL = m_settings.last_preset_folder; } void CVisualizationProjectM::ChooseUserPresetFolder(std::string pvalue) @@ -461,10 +637,67 @@ 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_settings.last_preset_folder = pvalue; - m_configPM.presetURL = m_settings.last_preset_folder; } } +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); + uint32_t presetsAdded = + projectm_playlist_add_path(m_playlist, m_settings.last_preset_folder.c_str(), true, false); + if (presetsAdded == 0) + { + kodi::Log(ADDON_LOG_WARNING, "%s: Failed to load presets from: %s, falling back to default", + __func__, m_settings.last_preset_folder.c_str()); + m_settings.preset_pack = DEFAULT_PRESET; + ChoosePresetPack(m_settings.preset_pack); + presetsAdded = + projectm_playlist_add_path(m_playlist, m_settings.last_preset_folder.c_str(), true, false); + } + if (presetsAdded > 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) +{ + if (!context) + return; + auto that = reinterpret_cast(context); + + std::unique_lock lock(that->m_pmMutex); + + if (that->m_shutdown || !that->m_playlist) + return; + + that->m_settings.last_preset_idx = + static_cast(projectm_playlist_get_position(that->m_playlist)); +} + ADDONCREATOR(CVisualizationProjectM) diff --git a/src/Main.h b/src/Main.h index 5dc03337..7b686e49 100644 --- a/src/Main.h +++ b/src/Main.h @@ -44,8 +44,9 @@ d4rk@xbmc.org #include #include -#include #include +#include +#include class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, public kodi::addon::CInstanceVisualization @@ -72,9 +73,13 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, 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); bool m_settingChanged{true}; bool m_UserPackFolder{false}; + std::string m_texturePath; // Stored values where we get from settings.xml // The name and order is identical to settings.xml. @@ -87,20 +92,18 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, std::atomic_int last_preset_idx{}; bool last_locked_status{false}; bool shuffle{false}; - int quality{512}; double smooth_duration{0}; double preset_duration{0}; float beat_sens{0}; } m_settings; - projectM* m_projectM{nullptr}; - projectM::Settings m_configPM; + projectm_handle m_projectM{nullptr}; + projectm_playlist_handle m_playlist{nullptr}; std::recursive_mutex m_pmMutex; std::atomic_bool m_shutdown{false}; // 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 46e089c4..d24e1315 100644 --- a/visualization.projectm/resources/settings.xml +++ b/visualization.projectm/resources/settings.xml @@ -54,7 +54,9 @@ true + + HAS_DX 512 From 477ced5aeb2464808175fc517606d8d058964185 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Fri, 26 Jun 2026 17:55:19 +0200 Subject: [PATCH 09/13] addon: Use ProjectM logging API functions and callbacks Implemented in ProjectM on Dec 7, 2025 with c6e02c9 Not included in the 4.1.6 release --- src/Main.cpp | 35 +++++++++++++++++++++++++++++++++++ src/Main.h | 5 ++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Main.cpp b/src/Main.cpp index 92a24d26..6af86885 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -72,6 +72,13 @@ const std::unordered_map installed_presets = { } // namespace +CVisualizationProjectM::CVisualizationProjectM() +{ + // Use ProjectM logging API functions and callbacks + projectm_set_log_callback(&ProjectMLogCallback, false, this); + projectm_set_log_level(PROJECTM_LOG_LEVEL_NOTSET, false); +} + CVisualizationProjectM::~CVisualizationProjectM() { m_shutdown = true; @@ -700,4 +707,32 @@ void CVisualizationProjectM::PresetSwitchedEvent(bool isHardCut, unsigned int in static_cast(projectm_playlist_get_position(that->m_playlist)); } +void CVisualizationProjectM::ProjectMLogCallback(const char* message, + projectm_log_level log_level, + void* user_data) +{ + ADDON_LOG level; + switch (log_level) + { + case PROJECTM_LOG_LEVEL_INFO: + level = ADDON_LOG_INFO; + break; + case PROJECTM_LOG_LEVEL_WARN: + level = ADDON_LOG_WARNING; + break; + case PROJECTM_LOG_LEVEL_ERROR: + level = ADDON_LOG_ERROR; + break; + case PROJECTM_LOG_LEVEL_FATAL: + level = ADDON_LOG_FATAL; + break; + case PROJECTM_LOG_LEVEL_TRACE: + case PROJECTM_LOG_LEVEL_DEBUG: + default: + level = ADDON_LOG_DEBUG; + break; + } + kodi::Log(level, "ProjectMLib: %s", message); +} + ADDONCREATOR(CVisualizationProjectM) diff --git a/src/Main.h b/src/Main.h index 7b686e49..d8c7f004 100644 --- a/src/Main.h +++ b/src/Main.h @@ -52,7 +52,7 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, public kodi::addon::CInstanceVisualization { public: - CVisualizationProjectM() = default; + CVisualizationProjectM(); ~CVisualizationProjectM() override; bool Init() override; @@ -76,6 +76,9 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, std::string GetBasename(std::string fullPath); void ReloadPlaylist(); static void PresetSwitchedEvent(bool isHardCut, unsigned int index, void* context); + static void ProjectMLogCallback(const char* message, + projectm_log_level log_level, + void* user_data); bool m_settingChanged{true}; bool m_UserPackFolder{false}; From 91042b5e18906054f130cd79331e0572d50abffa Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Fri, 26 Jun 2026 18:02:35 +0200 Subject: [PATCH 10/13] addon: Use channel amount for processed audio data Before was it hardcoded to Stereo and where the AI was not happy. This includes now the support for diverent channels amount --- src/Main.cpp | 27 +++++++++++++++++++++++++-- src/Main.h | 2 ++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index 6af86885..0a8ecfed 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -225,6 +225,29 @@ bool CVisualizationProjectM::Init() return true; } +bool CVisualizationProjectM::AudioStart(int channels, int samplesPerSec, int bitsPerSample) +{ + // Validate channel count + if (channels <= 0) + { + kodi::Log(ADDON_LOG_ERROR, "Invalid channel count: %d", channels); + return false; + } + + // Store channels amount for use in AudioData() + // + // Inside projectM about "projectm_pcm_add_float(...)" described as follow: + // param channels If the buffer is mono or stereo. + // Can be PROJECTM_MONO, PROJECTM_STEREO or the actual numerical channel count. + // Processing in ProjectM visible by "libprojectM/Audio/PCM.cpp", there as "uint32_t" + // Badly between the enum used. + // + // NOTE: During tests it was always given as stereo, also by mono and surround file playback. + m_playedChannelAmount = channels; + + return true; +} + //-- Audiodata ---------------------------------------------------------------- // Called by Kodi to pass new audio data to the vis //----------------------------------------------------------------------------- @@ -233,8 +256,8 @@ void CVisualizationProjectM::AudioData(const float* pAudioData, size_t iAudioDat std::unique_lock lock(m_pmMutex); if (m_projectM) { - projectm_pcm_add_float(m_projectM, pAudioData, iAudioDataLength / 2, - static_cast(2)); + projectm_pcm_add_float(m_projectM, pAudioData, iAudioDataLength / m_playedChannelAmount, + static_cast(m_playedChannelAmount)); } } diff --git a/src/Main.h b/src/Main.h index d8c7f004..a47a7c5d 100644 --- a/src/Main.h +++ b/src/Main.h @@ -57,6 +57,7 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, bool Init() override; void Render() override; + bool AudioStart(int channels, int samplesPerSec, int bitsPerSample) override; void AudioData(const float* audioData, size_t audioDataLength) override; bool GetPresets(std::vector& presets) override; bool LoadPreset(int select) override; @@ -83,6 +84,7 @@ class ATTR_DLL_LOCAL CVisualizationProjectM : public kodi::addon::CAddonBase, bool m_settingChanged{true}; bool m_UserPackFolder{false}; std::string m_texturePath; + uint32_t m_playedChannelAmount{PROJECTM_STEREO}; // Stored values where we get from settings.xml // The name and order is identical to settings.xml. From c22e31b14eca9100527f6f467cff683ed2185a5b Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 14 Jun 2026 12:19:28 +0200 Subject: [PATCH 11/13] depends: Prevent std::filesystem on older mac API versions On versions lower as 10.15 for OSX and 13.0 for embedded is std::filesystem not complete supported and compile fails there. --- ...ry-scan-fallback-on-mac-to-allow-old.patch | 298 ++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 depends/common/projectm/0002-Use-file-directory-scan-fallback-on-mac-to-allow-old.patch diff --git a/depends/common/projectm/0002-Use-file-directory-scan-fallback-on-mac-to-allow-old.patch b/depends/common/projectm/0002-Use-file-directory-scan-fallback-on-mac-to-allow-old.patch new file mode 100644 index 00000000..96a027d7 --- /dev/null +++ b/depends/common/projectm/0002-Use-file-directory-scan-fallback-on-mac-to-allow-old.patch @@ -0,0 +1,298 @@ +From 26beeb891ab55976fdca4762c50681e027364fee Mon Sep 17 00:00:00 2001 +From: Alwin Esch +Date: Sun, 14 Jun 2026 12:15:49 +0200 +Subject: [PATCH] Use file directory scan fallback on mac to allow older API + versions + +--- + src/libprojectM/Renderer/FileScanner.cpp | 102 ++++++++++++++++++++ + src/playlist/Playlist.cpp | 116 +++++++++++++++++++++++ + 2 files changed, 218 insertions(+) + +diff --git a/src/libprojectM/Renderer/FileScanner.cpp b/src/libprojectM/Renderer/FileScanner.cpp +index 26ad774..4ada7a5 100644 +--- a/src/libprojectM/Renderer/FileScanner.cpp ++++ b/src/libprojectM/Renderer/FileScanner.cpp +@@ -2,12 +2,33 @@ + + #include "Utils.hpp" + ++#ifdef __APPLE__ ++#import ++#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) ++ ++#ifdef TARGET_OS_OSX ++#ifdef SYSTEM_VERSION_LESS_THAN(@"10.15") ++#define DIR_ITERATOR_FALLBACK ++#endif ++#else ++#ifdef SYSTEM_VERSION_LESS_THAN(@"13.0") ++#define DIR_ITERATOR_FALLBACK ++#endif ++#endif ++#endif ++ + #include + #include + ++#ifdef DIR_ITERATOR_FALLBACK ++#include ++#include ++#include ++#else + // Fall back to boost if compiler doesn't support C++17 + #include PROJECTM_FILESYSTEM_INCLUDE + using namespace PROJECTM_FILESYSTEM_NAMESPACE::filesystem; ++#endif + + namespace libprojectM { + namespace Renderer { +@@ -23,6 +44,85 @@ FileScanner::FileScanner(const std::vector& rootDirs, std::vectord_name, &statbuf) == -1) ++ continue; ++ ++ if (S_ISREG(statbuf.st_mode) == 0) ++ continue; ++ ++ const char* dot = strrchr(dp->d_name, '.'); ++ if (!dot || dot == dp->d_name) ++ continue; ++ ++ auto extension = Utils::ToLower(dot + 1); ++ if (std::find(_extensions.begin(), _extensions.end(), extension) != _extensions.end()) ++ { ++ callback(dp->d_name, GetDirectory(dp->d_name)); ++ } ++ } ++ ++ } ++ catch (std::exception&) ++ { ++ // ToDo: Log error. We ignore it for now. ++ } ++ } ++} ++ ++#else ++ + void FileScanner::Scan(ScanCallback callback) + { + for (const auto& currentPath : _rootDirs) +@@ -79,5 +179,7 @@ void FileScanner::Scan(ScanCallback callback) + } + } + ++#endif ++ + } // namespace Renderer + } // namespace libprojectM +diff --git a/src/playlist/Playlist.cpp b/src/playlist/Playlist.cpp +index 6c609ed..45d0de4 100644 +--- a/src/playlist/Playlist.cpp ++++ b/src/playlist/Playlist.cpp +@@ -1,8 +1,48 @@ + #include "Playlist.hpp" + ++#ifdef __APPLE__ ++ #import ++ #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) ++ ++ #ifdef TARGET_OS_OSX ++ #ifdef SYSTEM_VERSION_LESS_THAN(@"10.15") ++ #define DIR_ITERATOR_FALLBACK ++ #endif ++ #else ++ #ifdef SYSTEM_VERSION_LESS_THAN(@"13.0") ++ #define DIR_ITERATOR_FALLBACK ++ #endif ++ #endif ++#endif ++ + #include + #include + ++#ifdef DIR_ITERATOR_FALLBACK ++#include ++#include ++ ++namespace { ++ ++std::string GetFileName(const std::string& strFileNameAndPath) ++{ ++ int i = strFileNameAndPath.size() - 1; ++ while (i >= 0) ++ { ++ const char ch = strFileNameAndPath[i]; ++ // Only break on ':' if it's a drive separator for DOS (ie d:foo) ++ if (ch == '/' || ch == '\\' || (ch == ':' && i == 1)) ++ break; ++ else ++ i--; ++ } ++ return strFileNameAndPath.substr(i + 1); ++} ++ ++} // namespace ++ ++#endif ++ + // Fall back to boost if compiler doesn't support C++17 + #include PROJECTM_FILESYSTEM_INCLUDE + using namespace PROJECTM_FILESYSTEM_NAMESPACE::filesystem; +@@ -88,6 +128,76 @@ bool Playlist::AddItem(const std::string& filename, uint32_t index, bool allowDu + return true; + } + ++#ifdef DIR_ITERATOR_FALLBACK ++ ++auto Playlist::AddPath(const std::string& path, uint32_t index, bool recursive, bool allowDuplicates) -> uint32_t ++{ ++ uint32_t presetsAdded{0}; ++ ++ if (path.empty()) ++ return presetsAdded; ++ ++ std::string pathUsed = path; ++ if (path.back() != '/') ++ pathUsed += '/'; ++ ++ DIR* dir = nullptr; ++ struct dirent* dp = nullptr; ++ ++ try ++ { ++ if ((dir = opendir(path.c_str())) != nullptr) ++ { ++ while ((dp = readdir(dir)) != nullptr) ++ { ++ if (strlen(dp->d_name) == 0 || dp->d_name[0] == '.') ++ continue; ++ ++ std::string name = pathUsed + dp->d_name; ++ ++ if (dp->d_type == DT_DIR) ++ { ++ if (recursive) ++ presetsAdded += AddPath(name, index + presetsAdded, true, allowDuplicates); ++ } ++ else if (dp->d_type == DT_REG) ++ { ++ if (name.substr(name.find_last_of(".")) == ".milk") ++ { ++ uint32_t currentIndex{InsertAtEnd}; ++ if (index < InsertAtEnd) ++ { ++ currentIndex = index + presetsAdded; ++ } ++ if (AddItem(name, currentIndex, allowDuplicates)) ++ { ++ presetsAdded++; ++ } ++ } ++ } ++ } ++ closedir(dir); ++ } ++ } ++ catch (std::exception&) ++ { ++ // Todo: Add failure feedback ++ return presetsAdded; ++ } ++ ++ // Increment indices of items in playback history equal or grater than the newly added index. ++ for (auto& historyItem : m_presetHistory) ++ { ++ if (historyItem >= index) ++ { ++ historyItem += presetsAdded; ++ } ++ } ++ ++ return presetsAdded; ++} ++ ++#else + + auto Playlist::AddPath(const std::string& path, uint32_t index, bool recursive, bool allowDuplicates) -> uint32_t + { +@@ -150,6 +260,7 @@ auto Playlist::AddPath(const std::string& path, uint32_t index, bool recursive, + return presetsAdded; + } + ++#endif + + auto Playlist::RemoveItem(uint32_t index) -> bool + { +@@ -222,8 +333,13 @@ void Playlist::Sort(uint32_t startIndex, uint32_t count, + break; + + case SortPredicate::FilenameOnly: { ++#ifdef DIR_ITERATOR_FALLBACK ++ leftFilename = GetFileName(left.Filename()); ++ rightFilename = GetFileName(right.Filename()); ++#else + leftFilename = path(left.Filename()).filename().string(); + rightFilename = path(right.Filename()).filename().string(); ++#endif + break; + } + } +-- +2.53.0 + From 986adaef0b19a5a0f99c586e473d62ef2aca87a8 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Fri, 26 Jun 2026 18:07:16 +0200 Subject: [PATCH 12/13] remove Windows build support Unfortunately, due to numerous problems, it currently no longer makes sense to use this add-on under Windows. On the one hand, Angle rendering using DirectX causes too many problems and incorrect representations. On the other hand, projectM version 4 for GLES requires minimum version 3.2, which is not available under Windows using DirectX. In addition, Kodi crashes when changing full screen when this add-on is in use. Support for Windows could possibly be brought back in the future. --- FindAngle.cmake | 23 -- Jenkinsfile | 2 +- azure-pipelines.yml | 64 ---- depends/windows/angle/0001-fix-uwp.patch | 263 ------------- depends/windows/angle/CMakeLists.txt | 359 ------------------ depends/windows/angle/angle.sha256 | 1 - depends/windows/angle/angle.txt | 1 - .../0001-change-dirent.h-install-path.patch | 25 -- depends/windows/dirent/dirent.sha256 | 1 - depends/windows/dirent/dirent.txt | 1 - depends/windows/dirent/flags.txt | 1 - .../0001-dlopen_with_widechar.patch | 23 -- .../windows/dlfcn-win32/dlfcn-win32.sha256 | 1 - depends/windows/dlfcn-win32/dlfcn-win32.txt | 1 - depends/windows/dlfcn-win32/flags.txt | 1 - .../projectm/0001-kodi-cmake-fixes.patch | 133 ------- ...to-GL-include-and-become-Win-working.patch | 26 -- .../0003-change-SOIL2-to-use-on-angle.patch | 56 --- depends/windows/projectm/CMakeLists.txt | 209 ---------- depends/windows/projectm/deps.txt | 4 - depends/windows/projectm/projectm.sha256 | 1 - depends/windows/projectm/projectm.txt | 1 - depends/windowsstore/angle/0001-fix-uwp.patch | 263 ------------- depends/windowsstore/angle/CMakeLists.txt | 359 ------------------ depends/windowsstore/angle/angle.sha256 | 1 - depends/windowsstore/angle/angle.txt | 1 - .../0001-change-dirent.h-install-path.patch | 25 -- depends/windowsstore/dirent/dirent.sha256 | 1 - depends/windowsstore/dirent/dirent.txt | 1 - depends/windowsstore/dirent/flags.txt | 1 - .../0001-win10-fixed-uwp-build.patch | 148 -------- .../dlfcn-win32/dlfcn-win32.sha256 | 1 - .../windowsstore/dlfcn-win32/dlfcn-win32.txt | 1 - depends/windowsstore/dlfcn-win32/flags.txt | 1 - .../projectm/0001-kodi-cmake-fixes.patch | 133 ------- ...to-GL-include-and-become-Win-working.patch | 26 -- .../0003-change-SOIL2-to-use-on-angle.patch | 56 --- depends/windowsstore/projectm/CMakeLists.txt | 209 ---------- depends/windowsstore/projectm/deps.txt | 4 - depends/windowsstore/projectm/projectm.sha256 | 1 - depends/windowsstore/projectm/projectm.txt | 1 - 41 files changed, 1 insertion(+), 2429 deletions(-) delete mode 100644 FindAngle.cmake delete mode 100644 azure-pipelines.yml delete mode 100644 depends/windows/angle/0001-fix-uwp.patch delete mode 100644 depends/windows/angle/CMakeLists.txt delete mode 100644 depends/windows/angle/angle.sha256 delete mode 100644 depends/windows/angle/angle.txt delete mode 100644 depends/windows/dirent/0001-change-dirent.h-install-path.patch delete mode 100644 depends/windows/dirent/dirent.sha256 delete mode 100644 depends/windows/dirent/dirent.txt delete mode 100644 depends/windows/dirent/flags.txt delete mode 100644 depends/windows/dlfcn-win32/0001-dlopen_with_widechar.patch delete mode 100644 depends/windows/dlfcn-win32/dlfcn-win32.sha256 delete mode 100644 depends/windows/dlfcn-win32/dlfcn-win32.txt delete mode 100644 depends/windows/dlfcn-win32/flags.txt delete mode 100644 depends/windows/projectm/0001-kodi-cmake-fixes.patch delete mode 100644 depends/windows/projectm/0002-add-angle-to-GL-include-and-become-Win-working.patch delete mode 100644 depends/windows/projectm/0003-change-SOIL2-to-use-on-angle.patch delete mode 100644 depends/windows/projectm/CMakeLists.txt delete mode 100644 depends/windows/projectm/deps.txt delete mode 100644 depends/windows/projectm/projectm.sha256 delete mode 100644 depends/windows/projectm/projectm.txt delete mode 100644 depends/windowsstore/angle/0001-fix-uwp.patch delete mode 100644 depends/windowsstore/angle/CMakeLists.txt delete mode 100644 depends/windowsstore/angle/angle.sha256 delete mode 100644 depends/windowsstore/angle/angle.txt delete mode 100644 depends/windowsstore/dirent/0001-change-dirent.h-install-path.patch delete mode 100644 depends/windowsstore/dirent/dirent.sha256 delete mode 100644 depends/windowsstore/dirent/dirent.txt delete mode 100644 depends/windowsstore/dirent/flags.txt delete mode 100644 depends/windowsstore/dlfcn-win32/0001-win10-fixed-uwp-build.patch delete mode 100644 depends/windowsstore/dlfcn-win32/dlfcn-win32.sha256 delete mode 100644 depends/windowsstore/dlfcn-win32/dlfcn-win32.txt delete mode 100644 depends/windowsstore/dlfcn-win32/flags.txt delete mode 100644 depends/windowsstore/projectm/0001-kodi-cmake-fixes.patch delete mode 100644 depends/windowsstore/projectm/0002-add-angle-to-GL-include-and-become-Win-working.patch delete mode 100644 depends/windowsstore/projectm/0003-change-SOIL2-to-use-on-angle.patch delete mode 100644 depends/windowsstore/projectm/CMakeLists.txt delete mode 100644 depends/windowsstore/projectm/deps.txt delete mode 100644 depends/windowsstore/projectm/projectm.sha256 delete mode 100644 depends/windowsstore/projectm/projectm.txt diff --git a/FindAngle.cmake b/FindAngle.cmake deleted file mode 100644 index 2db28eab..00000000 --- a/FindAngle.cmake +++ /dev/null @@ -1,23 +0,0 @@ -#.rst: -# FindAngle -# ------------ -# Finds the Angle library -# -# As Angle brings a GLES support are the given values in GLES style. -# -# 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. - -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) diff --git a/Jenkinsfile b/Jenkinsfile index b8416e67..ca460794 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1 +1 @@ -buildPlugin(version: "Piers") +buildPlugin(version: "Piers", platforms: ['android-armv7', 'android-aarch64', 'ios-aarch64', 'tvos-aarch64', 'osx-x86_64', 'osx-arm64']) diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index e1ccd5f7..00000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,64 +0,0 @@ -variables: - app_id: 'visualization.projectm' - -trigger: - branches: - include: - - Piers - - releases/* - paths: - include: - - '*' - exclude: - - 'debian/*' - -jobs: - - job: Windows - - pool: - vmImage: 'windows-2022' - - strategy: - matrix: - Win32: - GENERATOR: "Visual Studio 17 2022" - ARCHITECTURE: Win32 - CONFIGURATION: Release - Win64: - GENERATOR: "Visual Studio 17 2022" - ARCHITECTURE: x64 - CONFIGURATION: Release - ARM64: - GENERATOR: "Visual Studio 17 2022" - ARCHITECTURE: ARM64 - CONFIGURATION: Release - Win64-UWP: - GENERATOR: "Visual Studio 17 2022" - ARCHITECTURE: x64 - CONFIGURATION: Release - WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.22621.0" - - workspace: - clean: all - - steps: - - - script: | - cd .. - git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git kodi - cd $(Build.SourcesDirectory) - mkdir build - cd build - mkdir "definition/$(app_id)" - echo $(app_id) . . > definition/$(app_id)/$(app_id).txt - mklink /J "$(Pipeline.Workspace)/$(app_id)" "$(Build.SourcesDirectory)" - - - task: CMake@1 - inputs: - workingDirectory: 'build' - cmakeArgs: '-T host=x64 -G "$(GENERATOR)" -A $(ARCHITECTURE) $(WINSTORE) -DADDONS_TO_BUILD=$(app_id) -DCMAKE_BUILD_TYPE=$(CONFIGURATION) -DADDONS_DEFINITION_DIR=$(Pipeline.Workspace)/$(app_id)/build/definition -DADDON_SRC_PREFIX=../.. -DCMAKE_INSTALL_PREFIX=../../kodi/addons -DPACKAGE_ZIP=1 ../../kodi/cmake/addons' - - - task: CMake@1 - inputs: - workingDirectory: 'build' - cmakeArgs: '--build . --config $(CONFIGURATION) --target $(app_id)' diff --git a/depends/windows/angle/0001-fix-uwp.patch b/depends/windows/angle/0001-fix-uwp.patch deleted file mode 100644 index 7f5bc5f7..00000000 --- a/depends/windows/angle/0001-fix-uwp.patch +++ /dev/null @@ -1,263 +0,0 @@ -diff --git a/commit.h b/commit.h -new file mode 100644 -index 0000000..654e023 ---- /dev/null -+++ b/commit.h -@@ -0,0 +1,3 @@ -+#define ANGLE_COMMIT_HASH "invalid-hash" -+#define ANGLE_COMMIT_HASH_SIZE 12 -+#define ANGLE_COMMIT_DATE "invalid-date" -diff --git a/src/common/system_utils_win.cpp b/src/common/system_utils_win.cpp -index 7db4485..04b6a85 100644 ---- a/src/common/system_utils_win.cpp -+++ b/src/common/system_utils_win.cpp -@@ -37,6 +37,7 @@ const char *GetSharedLibraryExtension() - - Optional GetCWD() - { -+#ifndef ANGLE_ENABLE_WINDOWS_STORE - std::array pathBuf; - DWORD result = GetCurrentDirectoryA(static_cast(pathBuf.size()), pathBuf.data()); - if (result == 0) -@@ -44,11 +45,18 @@ Optional GetCWD() - return Optional::Invalid(); - } - return std::string(pathBuf.data()); -+#else -+ return std::string(); -+#endif - } - - bool SetCWD(const char *dirName) - { -+#ifndef ANGLE_ENABLE_WINDOWS_STORE - return (SetCurrentDirectoryA(dirName) == TRUE); -+#else -+ return false; -+#endif - } - - bool UnsetEnvironmentVar(const char *variableName) -@@ -86,12 +94,14 @@ class Win32Library : public Library - public: - Win32Library(const char *libraryName) - { -+#ifndef ANGLE_ENABLE_WINDOWS_STORE - char buffer[MAX_PATH]; - int ret = snprintf(buffer, MAX_PATH, "%s.%s", libraryName, GetSharedLibraryExtension()); - if (ret > 0 && ret < MAX_PATH) - { - mModule = LoadLibraryA(buffer); - } -+#endif - } - - ~Win32Library() override -diff --git a/src/libANGLE/renderer/d3d/RendererD3D.cpp b/src/libANGLE/renderer/d3d/RendererD3D.cpp -index 2a8d022..36f1f25 100644 ---- a/src/libANGLE/renderer/d3d/RendererD3D.cpp -+++ b/src/libANGLE/renderer/d3d/RendererD3D.cpp -@@ -229,7 +229,9 @@ GLenum DefaultGLErrorCode(HRESULT hr) - { - switch (hr) - { -+#ifdef ANGLE_ENABLE_D3D9 - case D3DERR_OUTOFVIDEOMEMORY: -+#endif - case E_OUTOFMEMORY: - return GL_OUT_OF_MEMORY; - default: -diff --git a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -index 9b67ac4..20584e3 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -1192,11 +1192,13 @@ void Renderer11::generateDisplayExtensions(egl::DisplayExtensions *outExtensions - // All D3D feature levels support robust resource init - outExtensions->robustResourceInitialization = true; - -+#ifndef ANGLE_ENABLE_WINDOWS_STORE - // Compositor Native Window capabilies require WinVer >= 1803 - if (CompositorNativeWindow11::IsSupportedWinRelease()) - { - outExtensions->windowsUIComposition = true; - } -+#endif - } - - angle::Result Renderer11::flush(Context11 *context11) -@@ -1270,7 +1272,11 @@ NativeWindowD3D *Renderer11::createNativeWindow(EGLNativeWindowType window, - const egl::Config *config, - const egl::AttributeMap &attribs) const - { -- auto useWinUiComp = window != nullptr && !NativeWindow11Win32::IsValidNativeWindow(window); -+#ifdef ANGLE_ENABLE_WINDOWS_STORE -+ (void)attribs; -+ return new NativeWindow11WinRT(window, config->alphaSize > 0); -+#else -+ auto useWinUiComp = window != nullptr && !isValidNativeWindow(window); - - if (useWinUiComp) - { -@@ -1278,15 +1284,11 @@ NativeWindowD3D *Renderer11::createNativeWindow(EGLNativeWindowType window, - } - else - { --#ifdef ANGLE_ENABLE_WINDOWS_STORE -- UNUSED_VARIABLE(attribs); -- return new NativeWindow11WinRT(window, config->alphaSize > 0); --#else - return new NativeWindow11Win32( - window, config->alphaSize > 0, - attribs.get(EGL_DIRECT_COMPOSITION_ANGLE, EGL_FALSE) == EGL_TRUE); --#endif - } -+#endif - } - - egl::Error Renderer11::getD3DTextureInfo(const egl::Config *configuration, -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -index cb2f279..99b615c 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -@@ -145,6 +145,7 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) - { - if (device == nullptr || factory == nullptr || swapChain == nullptr || width == 0 || -@@ -158,7 +159,7 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, - swapChainDesc.Height = height; - swapChainDesc.Format = format; - swapChainDesc.Stereo = FALSE; -- swapChainDesc.SampleDesc.Count = 1; -+ swapChainDesc.SampleDesc.Count = samples; - swapChainDesc.SampleDesc.Quality = 0; - swapChainDesc.BufferUsage = - DXGI_USAGE_SHADER_INPUT | DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER; -@@ -213,10 +214,10 @@ HRESULT GetCoreWindowSizeInPixels(const ComPtr displayProperties; -+ ComPtr displayProperties; - - if (SUCCEEDED(GetActivationFactory( -- HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayProperties).Get(), -+ HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayInformation).Get(), - displayProperties.GetAddressOf()))) - { - float dpi = 96.0f; -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -index ae57cfb..3262d0a 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -@@ -35,7 +35,8 @@ class CoreWindowNativeWindow : public InspectableNativeWindow, - DXGI_FORMAT format, - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) override; - - protected: -@@ -49,7 +50,7 @@ class CoreWindowNativeWindow : public InspectableNativeWindow, - ComPtr> mPropertyMap; - }; - --[uuid(7F924F66 - EBAE - 40E5 - A10B - B8F35E245190)] class CoreWindowSizeChangedHandler -+[uuid(7F924F66-EBAE-40E5-A10B-B8F35E245190)] class CoreWindowSizeChangedHandler - : public Microsoft::WRL::RuntimeClass< - Microsoft::WRL::RuntimeClassFlags, - IWindowSizeChangedEventHandler> -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -index 708e8a2..9bfa4c4 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -@@ -53,6 +53,7 @@ class InspectableNativeWindow - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) = 0; - - bool getClientRect(RECT *rect) -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp -index 8972ca2..571955d 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp -@@ -88,6 +88,7 @@ HRESULT NativeWindow11WinRT::createSwapChain(ID3D11Device *device, - DXGI_FORMAT format, - UINT width, - UINT height, -+ UINT samples, - IDXGISwapChain **swapChain) - { - if (mImpl) -@@ -95,7 +96,7 @@ HRESULT NativeWindow11WinRT::createSwapChain(ID3D11Device *device, - IDXGIFactory2 *factory2 = d3d11::DynamicCastComObject(factory); - IDXGISwapChain1 *swapChain1 = nullptr; - HRESULT result = -- mImpl->createSwapChain(device, factory2, format, width, height, mHasAlpha, &swapChain1); -+ mImpl->createSwapChain(device, factory2, format, width, height, mHasAlpha, samples, &swapChain1); - SafeRelease(factory2); - *swapChain = static_cast(swapChain1); - return result; -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h -index eac5b21..92c3121 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h -@@ -34,6 +34,7 @@ class NativeWindow11WinRT : public NativeWindow11 - DXGI_FORMAT format, - UINT width, - UINT height, -+ UINT samples, - IDXGISwapChain **swapChain) override; - - void commitChange() override; -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -index af0beb6..2fc32f1 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -@@ -247,6 +247,7 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) - { - if (device == nullptr || factory == nullptr || swapChain == nullptr || width == 0 || -@@ -260,7 +261,7 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, - swapChainDesc.Height = height; - swapChainDesc.Format = format; - swapChainDesc.Stereo = FALSE; -- swapChainDesc.SampleDesc.Count = 1; -+ swapChainDesc.SampleDesc.Count = samples; - swapChainDesc.SampleDesc.Quality = 0; - swapChainDesc.BufferUsage = - DXGI_USAGE_SHADER_INPUT | DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER; -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -index 09642ee..7fc13da 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -@@ -28,6 +28,7 @@ class SwapChainPanelNativeWindow : public InspectableNativeWindow, - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) override; - - protected: -@@ -43,7 +44,7 @@ class SwapChainPanelNativeWindow : public InspectableNativeWindow, - ComPtr mSwapChain; - }; - --[uuid(8ACBD974 - 8187 - 4508 - AD80 - AEC77F93CF36)] class SwapChainPanelSizeChangedHandler -+[uuid(8ACBD974-8187-4508-AD80-AEC77F93CF36)] class SwapChainPanelSizeChangedHandler - : public Microsoft::WRL::RuntimeClass< - Microsoft::WRL::RuntimeClassFlags, - ABI::Windows::UI::Xaml::ISizeChangedEventHandler> --- -2.20.1.windows.1 - diff --git a/depends/windows/angle/CMakeLists.txt b/depends/windows/angle/CMakeLists.txt deleted file mode 100644 index b978815a..00000000 --- a/depends/windows/angle/CMakeLists.txt +++ /dev/null @@ -1,359 +0,0 @@ -cmake_minimum_required(VERSION 3.18) -project(angle) - -message(STATUS "Used CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") -message(STATUS "Used CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}") -message(STATUS "Used CMAKE_HOST_SYSTEM_VERSION: ${CMAKE_HOST_SYSTEM_VERSION}") - -if(CMAKE_SYSTEM_VERSION VERSION_LESS 10.0.16299.0) - message(FATAL_ERROR "Minimal Windows system version must be: 10.0.16299.0") -endif() - -# Force package name to kodi, e.g. BUILD_KODI_ADDON not defined on addon depends build! -if(NOT PACKAGE_NAME) - set(PACKAGE_NAME "kodi") -endif() - -if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) - cmake_policy(SET CMP0076 NEW) -endif() - -option(ANGLE_ENABLE_NULL "Enable null renderer" OFF) -# windows options -option(ANGLE_ENABLE_D3D9 "Enable support D3D9 renderer (Windows desktop only)" OFF) -option(ANGLE_ENABLE_WGL "Enable support OpenGL renderer on Windows" OFF) - -if(CMAKE_SIZEOF_VOID_P EQUAL 4) - add_definitions(-DANGLE_IS_32_BIT_CPU) -elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) - add_definitions(-DANGLE_IS_64_BIT_CPU) -else() - message(FATAL_ERROR "Unknown current CPU bit size: ${CMAKE_SIZEOF_VOID_P}") -endif() - -if(WIN32 AND NOT WINDOWS_STORE) - set(WINDOWS_DESKTOP TRUE) -else() - set(WINDOWS_DESKTOP FALSE) -endif() -if (WINDOWS_DESKTOP OR WINDOWS_STORE) - set(IS_WIN 1) - set(WINDOWS_ANY TRUE) -else() - set(WINDOWS_ANY FALSE) -endif() - -if(UNIX AND NOT APPLE) - set(LINUX TRUE) -else() - set(LINUX FALSE) -endif() - -if(CMAKE_BUILD_TYPE MATCHES DEBUG) - set(IS_DEBUG TRUE) -else() - set(IS_DEBUG FALSE) -endif() - -if(WINDOWS_ANY) - add_compile_options(/d2guard4 /Wv:18 /guard:cf) -else() - add_compile_options(-std=c++17 -fPIC) -endif() - -if(APPLE) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa -framework OpenGL -framework IOKit -framework CoreFoundation -framework IOSurface -framework QuartzCore -framework CoreGraphics") -endif() - -set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") -set(CMAKE_STATIC_LIBRARY_PREFIX "") -set(CMAKE_DEBUG_POSTFIX "_dbg") - -# if BUILD_SHARED_LIBS is undefined comes it to a cmake build error, set it as default to 0. -if(NOT DEFINED BUILD_SHARED_LIBS) - set(BUILD_SHARED_LIBS 0) -endif() - -add_definitions( - -D_CRT_SECURE_NO_DEPRECATE - -D_SCL_SECURE_NO_WARNINGS - -D_HAS_EXCEPTIONS=0 - -DNOMINMAX - -DANGLE_STANDALONE_BUILD) -if(IS_DEBUG) - add_definitions(-DANGLE_ENABLE_DEBUG_ANNOTATIONS) -endif() -if(DCHECK_ALWAYS_ON) - add_definitions(-DANGLE_ENABLE_RELEASE_ASSERTS) -endif() - -# Shared library function visibility -if(IS_WIN) - set(ANGLE_GL_VISIBILITY_CONFIG GL_APICALL= - GL_API=) -else() - set(ANGLE_GL_VISIBILITY_CONFIG GL_APICALL=__attribute__((visibility(\"default\"))) - GL_API=__attribute__((visibility(\"default\")))) -endif() - -# This config controls export definitions on ANGLE API calls. -set(ANGLE_STATIC_DEFINES ANGLE_EXPORT= - ANGLE_UTIL_EXPORT= - EGLAPI= - GL_APICALL= - GL_API=) - -set(GL_PROTOTYPES GL_GLES_PROTOTYPES=1 - EGL_EGL_PROTOTYPES=1 - GL_GLEXT_PROTOTYPES - EGL_EGLEXT_PROTOTYPES - HAS_ANGLE) - -########## -# Generate required commit.h file -set(COMMIT_H - "#define ANGLE_COMMIT_HASH \"invalid-hash\"\n" - "#define ANGLE_COMMIT_HASH_SIZE 12\n" - "#define ANGLE_COMMIT_DATE \"invalid-date\"\n") -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/include/id/commit.h ${COMMIT_H}) -include_directories(include ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_SOURCE_DIR}/src/common/third_party/base - ${CMAKE_CURRENT_BINARY_DIR}/include) - -########## -# Load angle source list by translating *.gni's to cmake format -set(GNI_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/compiler.gni - ${CMAKE_CURRENT_SOURCE_DIR}/src/libGLESv2.gni - ${CMAKE_CURRENT_SOURCE_DIR}/src/libANGLE/renderer/d3d/d3d11/d3d11_blit_shaders_autogen.gni - ${CMAKE_CURRENT_SOURCE_DIR}/util/util.gni) - -set(ANGLE_SOURCE_FILES "") -foreach(file ${GNI_FILES}) - get_filename_component(fullpath "${file}" ABSOLUTE) - get_filename_component(file "${file}" NAME_WE) - - file(READ ${fullpath} CONTENT_GNI) - string(REGEX REPLACE "([0-9a-z_]+)([^a-z]+)([*^\=)])" "set(\\1 XXXYYY \\1 ZZZ" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_win" "IS_WIN" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_linux" "IS_LINUX" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_android" "IS_ANDROID" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_fuchsia" "IS_FUCHSIA" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_mac" "IS_MAC" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "||" "OR" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "}" "endif()" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " {" "" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "\"," "" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "\"" "" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " [" "" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "]" ")" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " ZZZ" "}" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "YYY " "{" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "XXX" "$" CONTENT_GNI ${CONTENT_GNI}) - if(CMAKE_VERSION VERSION_LESS 3.13) - string(REPLACE " src/" " \${CMAKE_CURRENT_SOURCE_DIR}/src/" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " include/" " \${CMAKE_CURRENT_SOURCE_DIR}/include/" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " util/" " \${CMAKE_CURRENT_SOURCE_DIR}/util/" CONTENT_GNI ${CONTENT_GNI}) - endif() - file(WRITE ${CMAKE_BINARY_DIR}/angleSourceList-${file}.cmake ${CONTENT_GNI}) - list(APPEND ANGLE_SOURCE_FILES ${CMAKE_BINARY_DIR}/angleSourceList-${file}.cmake) -endforeach() - -foreach(file ${ANGLE_SOURCE_FILES}) - include(${file}) -endforeach() - -########## -# angle::angle_system_utils -add_library(angle_system_utils OBJECT ${angle_system_utils_sources}) -add_library(angle::system_utils ALIAS angle_system_utils) - -########## -# angle::xxhash -add_library(angle_xxhash OBJECT ${xxhash_sources}) -add_library(angle::xxhash ALIAS angle_xxhash) - -########## -# angle::common -add_library(angle_common OBJECT ${libangle_common_sources} - ${libangle_includes} - ${CMAKE_SOURCE_DIR}/src/common/version.h) -add_library(angle::common ALIAS angle_common) - -########## -# angle::image_util -add_library(angle_image_util OBJECT ${libangle_image_util_sources}) -add_library(angle::image_util ALIAS angle_image_util) - -########## -# angle::preprocessor -add_library(angle_preprocessor OBJECT ${angle_preprocessor_sources}) -add_library(angle::preprocessor ALIAS angle_preprocessor) - -########## -# angle::translator -add_library(angle_translator OBJECT ${angle_translator_sources} - ${angle_translator_essl_sources} - ${angle_translator_glsl_sources} - ${angle_translator_hlsl_sources}) -target_compile_definitions(angle_translator PUBLIC ANGLE_ENABLE_ESSL - ANGLE_ENABLE_GLSL - ANGLE_ENABLE_HLSL) -add_library(angle::translator ALIAS angle_translator) - -########## -# libANGLE - -## OpenGL Renderer -if((WINDOWS_DESKTOP AND ANGLE_ENABLE_WGL) OR LINUX OR APPLE) - add_library(angle_renderer_opengl INTERFACE) - if(WINDOWS_DESKTOP) - target_sources(angle_renderer_opengl INTERFACE $ - $) - elseif(APPLE) - target_sources(angle_renderer_opengl INTERFACE $ - $) - elseif(LINUX) - target_sources(angle_renderer_opengl INTERFACE $ - $) - endif() - - target_compile_definitions(angle_renderer_opengl INTERFACE ANGLE_ENABLE_OPENGL) - add_library(angle::renderer::opengl ALIAS angle_renderer_opengl) -endif() - -# D3D Renderers -if(WINDOWS_ANY) - ## WinRT D3D Renderer - if(WINDOWS_STORE) - add_library(angle_renderer_winrt INTERFACE) - target_sources(angle_renderer_winrt INTERFACE $) - target_link_libraries(angle_renderer_winrt INTERFACE d3dcompiler.lib) - add_library(angle::renderer::winrt ALIAS angle_renderer_winrt) - endif() - - ## Win32/d3d9 D3D Renderer - if(WINDOWS_DESKTOP AND ANGLE_ENABLE_D3D9) - add_library(angle_renderer_win32 INTERFACE) - target_sources(angle_renderer_win32 INTERFACE $ - $) - target_compile_definitions(angle_renderer_win32 INTERFACE ANGLE_ENABLE_D3D9) - target_link_libraries(angle_renderer_win32 INTERFACE d3d9.lib) - add_library(angle::renderer::win32 ALIAS angle_renderer_win32) - list(APPEND ANGLE_DEPEND_LIBRARIES d3d9.lib) - endif() - - ## D3D11 Base renderer - add_library(angle_renderer_d3d INTERFACE) - target_sources(angle_renderer_d3d INTERFACE $ - $ - $) - if(WINDOWS_DESKTOP) - target_sources(angle_renderer_d3d INTERFACE $) - endif() - target_compile_definitions(angle_renderer_d3d INTERFACE - ANGLE_ENABLE_D3D11 - "ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={ \"d3dcompiler_47.dll\", \"d3dcompiler_46.dll\", \"d3dcompiler_43.dll\" }" - ) - target_link_libraries(angle_renderer_d3d INTERFACE d3d11.lib dxguid.lib) - add_library(angle::renderer::d3d ALIAS angle_renderer_d3d) - list(APPEND ANGLE_DEPEND_LIBRARIES d3d11.lib dxguid.lib) -endif() - -## Core libANGLE library -if(LINUX OR APPLE) - set(LIBANGLE_RENDERER_PLATFORM - $ - ) -elseif(WINDOWS_STORE) - set(LIBANGLE_RENDERER_PLATFORM - $ - $ - ) -elseif(WINDOWS_DESKTOP) - set(LIBANGLE_RENDERER_PLATFORM - $ - $<$:$> - $<$:$> - gdi32 - ) -else() - set(LIBANGLE_RENDERER_PLATFORM ) -endif() - -if(ANGLE_ENABLE_NULL) - add_library(angle_renderer_null INTERFACE) - target_sources(angle_renderer_null INTERFACE $ - $) - add_library(angle::renderer::null ALIAS angle_renderer_null) - list(APPEND LIBANGLE_RENDERER_PLATFORM $) -endif() - -add_library(libANGLE INTERFACE) -target_sources(libANGLE INTERFACE $ - $ - $ - $ - $ - $ - $) -target_link_libraries(libANGLE INTERFACE ${LIBANGLE_RENDERER_PLATFORM}) -target_include_directories(libANGLE INTERFACE $) -target_compile_definitions(libANGLE INTERFACE LIBANGLE_IMPLEMENTATION - $<$:ANGLE_ENABLE_NULL> - $<$:ANGLE_USE_X11>) -add_library(angle::libANGLE ALIAS libANGLE) - -########## -# libGLESv2 -add_library(libGLESv2 ${libglesv2_sources} - ${libangle_includes} - ${CMAKE_CURRENT_SOURCE_DIR}/src/libGLESv2/libGLESv2_autogen.def) -target_link_libraries(libGLESv2 PRIVATE $ - ${ANGLE_DEPEND_LIBRARIES}) -if(BUILD_SHARED_LIBS) - target_compile_definitions(libGLESv2 PRIVATE LIBGLESV2_IMPLEMENTATION - ${GL_PROTOTYPES} - ${ANGLE_GL_VISIBILITY_CONFIG}) -else() - target_compile_definitions(libGLESv2 PRIVATE LIBGLESV2_IMPLEMENTATION - ${GL_PROTOTYPES} - PUBLIC ${ANGLE_STATIC_DEFINES}) -endif() -target_include_directories(libGLESv2 PUBLIC $) -target_compile_definitions(libGLESv2 PUBLIC $) - -########## -# libEGL -add_library(libEGL ${libegl_sources} - ${libangle_includes} - $<$:${CMAKE_CURRENT_SOURCE_DIR}/src/libEGL/libEGL.def>) -target_link_libraries(libEGL PUBLIC libGLESv2) -target_include_directories(libEGL PUBLIC $) - -########## -# Angle installation -set_target_properties(libGLESv2 PROPERTIES PREFIX "") -set_target_properties(libEGL PROPERTIES PREFIX "") - -install(TARGETS libGLESv2 - libEGL - EXPORT ANGLEExport - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) - -install(EXPORT ANGLEExport - FILE ${PACKAGE_NAME}-angle-config.cmake - NAMESPACE ${PACKAGE_NAME}::angle:: - DESTINATION share/${PACKAGE_NAME}-angle) - -if(NOT DISABLE_INSTALL_HEADERS) - install(DIRECTORY include/ - DESTINATION include - FILES_MATCHING - PATTERN "*.h" - PATTERN "*.inc" - PATTERN "GLSLANG" EXCLUDE - PATTERN "export.h" EXCLUDE) -endif() diff --git a/depends/windows/angle/angle.sha256 b/depends/windows/angle/angle.sha256 deleted file mode 100644 index 31d00b2c..00000000 --- a/depends/windows/angle/angle.sha256 +++ /dev/null @@ -1 +0,0 @@ -28836135bd7549c01d7d07ae5a0a0956096f2c63355cf243ef306b2213bd91ae diff --git a/depends/windows/angle/angle.txt b/depends/windows/angle/angle.txt deleted file mode 100644 index e9c9ff30..00000000 --- a/depends/windows/angle/angle.txt +++ /dev/null @@ -1 +0,0 @@ -angle https://github.com/google/angle/archive/chromium/3712.tar.gz diff --git a/depends/windows/dirent/0001-change-dirent.h-install-path.patch b/depends/windows/dirent/0001-change-dirent.h-install-path.patch deleted file mode 100644 index 6cf04892..00000000 --- a/depends/windows/dirent/0001-change-dirent.h-install-path.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 5e394b992d95e5a8ca4ba7aa3c3b91a84b8ce839 Mon Sep 17 00:00:00 2001 -From: Alwin Esch -Date: Wed, 20 May 2026 10:57:05 +0200 -Subject: [PATCH] change dirent.h install path - ---- - CMakeLists.txt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 8bc6205..7b6667b 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -74,7 +74,7 @@ install( - FILES - include/dirent.h - DESTINATION -- include/dirent-${DIRENT_VERSION} -+ include - COMPONENT - dev - ) --- -2.53.0 - diff --git a/depends/windows/dirent/dirent.sha256 b/depends/windows/dirent/dirent.sha256 deleted file mode 100644 index f4cdb9b8..00000000 --- a/depends/windows/dirent/dirent.sha256 +++ /dev/null @@ -1 +0,0 @@ -6ffcc318f00be192acb611c58aa58ee0cfd96776010680d7f38cf24f3dd8baf9 diff --git a/depends/windows/dirent/dirent.txt b/depends/windows/dirent/dirent.txt deleted file mode 100644 index f9627a21..00000000 --- a/depends/windows/dirent/dirent.txt +++ /dev/null @@ -1 +0,0 @@ -dirent https://github.com/tronkko/dirent/archive/1.26.zip diff --git a/depends/windows/dirent/flags.txt b/depends/windows/dirent/flags.txt deleted file mode 100644 index 4fa8e78e..00000000 --- a/depends/windows/dirent/flags.txt +++ /dev/null @@ -1 +0,0 @@ --DDIRENT_TESTS=OFF -DDIRENT_EXAMPLES=OFF \ No newline at end of file diff --git a/depends/windows/dlfcn-win32/0001-dlopen_with_widechar.patch b/depends/windows/dlfcn-win32/0001-dlopen_with_widechar.patch deleted file mode 100644 index f31fdc7e..00000000 --- a/depends/windows/dlfcn-win32/0001-dlopen_with_widechar.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/src/dlfcn.c b/src/dlfcn.c -index cb9f9bb..1b8808c 100644 ---- a/src/dlfcn.c -+++ b/src/dlfcn.c -@@ -415,7 +415,17 @@ void *dlopen( const char *file, int mode ) - * to UNIX's search paths (start with system folders instead of current - * folder). - */ -- hModule = LoadLibraryExA( lpFileName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ); -+ int wide_len = MultiByteToWideChar(CP_UTF8, 0, lpFileName, -1, 0, 0); -+ if (wide_len > 0) -+ { -+ wchar_t* lpFileNameW = (wchar_t*)malloc(wide_len * sizeof(wchar_t)); -+ MultiByteToWideChar(CP_UTF8, 0, lpFileName, -1, lpFileNameW, wide_len); -+ -+ hModule = LoadLibraryExW(lpFileNameW, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); -+ free(lpFileNameW); -+ } -+ else -+ hModule = 0; - - if( !hModule ) - { diff --git a/depends/windows/dlfcn-win32/dlfcn-win32.sha256 b/depends/windows/dlfcn-win32/dlfcn-win32.sha256 deleted file mode 100644 index 4d789d7f..00000000 --- a/depends/windows/dlfcn-win32/dlfcn-win32.sha256 +++ /dev/null @@ -1 +0,0 @@ -f61a874bc9163ab488accb364fd681d109870c86e8071f4710cbcdcbaf9f2565 diff --git a/depends/windows/dlfcn-win32/dlfcn-win32.txt b/depends/windows/dlfcn-win32/dlfcn-win32.txt deleted file mode 100644 index e4993f72..00000000 --- a/depends/windows/dlfcn-win32/dlfcn-win32.txt +++ /dev/null @@ -1 +0,0 @@ -dlfcn-win32 https://github.com/dlfcn-win32/dlfcn-win32/archive/v1.4.2.tar.gz diff --git a/depends/windows/dlfcn-win32/flags.txt b/depends/windows/dlfcn-win32/flags.txt deleted file mode 100644 index 3cb0a00e..00000000 --- a/depends/windows/dlfcn-win32/flags.txt +++ /dev/null @@ -1 +0,0 @@ --DBUILD_SHARED_LIBS=OFF 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 928d13c3..00000000 --- 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 be670f5e..00000000 --- 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 b2dcdc60..00000000 --- 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 75aecafc..00000000 --- a/depends/windows/projectm/CMakeLists.txt +++ /dev/null @@ -1,209 +0,0 @@ -cmake_minimum_required(VERSION 3.18) -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 deleted file mode 100644 index 0a8e6015..00000000 --- a/depends/windows/projectm/deps.txt +++ /dev/null @@ -1,4 +0,0 @@ -angle -glm -dirent -dlfcn-win32 diff --git a/depends/windows/projectm/projectm.sha256 b/depends/windows/projectm/projectm.sha256 deleted file mode 100644 index 9199e60b..00000000 --- a/depends/windows/projectm/projectm.sha256 +++ /dev/null @@ -1 +0,0 @@ -b6b99dde5c8f0822ae362606a0429628ee478f4ec943a156723841b742954707 diff --git a/depends/windows/projectm/projectm.txt b/depends/windows/projectm/projectm.txt deleted file mode 100644 index c8995033..00000000 --- a/depends/windows/projectm/projectm.txt +++ /dev/null @@ -1 +0,0 @@ -projectm https://github.com/projectM-visualizer/projectm/releases/download/v3.1.12/projectM-3.1.12.tar.gz diff --git a/depends/windowsstore/angle/0001-fix-uwp.patch b/depends/windowsstore/angle/0001-fix-uwp.patch deleted file mode 100644 index 7f5bc5f7..00000000 --- a/depends/windowsstore/angle/0001-fix-uwp.patch +++ /dev/null @@ -1,263 +0,0 @@ -diff --git a/commit.h b/commit.h -new file mode 100644 -index 0000000..654e023 ---- /dev/null -+++ b/commit.h -@@ -0,0 +1,3 @@ -+#define ANGLE_COMMIT_HASH "invalid-hash" -+#define ANGLE_COMMIT_HASH_SIZE 12 -+#define ANGLE_COMMIT_DATE "invalid-date" -diff --git a/src/common/system_utils_win.cpp b/src/common/system_utils_win.cpp -index 7db4485..04b6a85 100644 ---- a/src/common/system_utils_win.cpp -+++ b/src/common/system_utils_win.cpp -@@ -37,6 +37,7 @@ const char *GetSharedLibraryExtension() - - Optional GetCWD() - { -+#ifndef ANGLE_ENABLE_WINDOWS_STORE - std::array pathBuf; - DWORD result = GetCurrentDirectoryA(static_cast(pathBuf.size()), pathBuf.data()); - if (result == 0) -@@ -44,11 +45,18 @@ Optional GetCWD() - return Optional::Invalid(); - } - return std::string(pathBuf.data()); -+#else -+ return std::string(); -+#endif - } - - bool SetCWD(const char *dirName) - { -+#ifndef ANGLE_ENABLE_WINDOWS_STORE - return (SetCurrentDirectoryA(dirName) == TRUE); -+#else -+ return false; -+#endif - } - - bool UnsetEnvironmentVar(const char *variableName) -@@ -86,12 +94,14 @@ class Win32Library : public Library - public: - Win32Library(const char *libraryName) - { -+#ifndef ANGLE_ENABLE_WINDOWS_STORE - char buffer[MAX_PATH]; - int ret = snprintf(buffer, MAX_PATH, "%s.%s", libraryName, GetSharedLibraryExtension()); - if (ret > 0 && ret < MAX_PATH) - { - mModule = LoadLibraryA(buffer); - } -+#endif - } - - ~Win32Library() override -diff --git a/src/libANGLE/renderer/d3d/RendererD3D.cpp b/src/libANGLE/renderer/d3d/RendererD3D.cpp -index 2a8d022..36f1f25 100644 ---- a/src/libANGLE/renderer/d3d/RendererD3D.cpp -+++ b/src/libANGLE/renderer/d3d/RendererD3D.cpp -@@ -229,7 +229,9 @@ GLenum DefaultGLErrorCode(HRESULT hr) - { - switch (hr) - { -+#ifdef ANGLE_ENABLE_D3D9 - case D3DERR_OUTOFVIDEOMEMORY: -+#endif - case E_OUTOFMEMORY: - return GL_OUT_OF_MEMORY; - default: -diff --git a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -index 9b67ac4..20584e3 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -1192,11 +1192,13 @@ void Renderer11::generateDisplayExtensions(egl::DisplayExtensions *outExtensions - // All D3D feature levels support robust resource init - outExtensions->robustResourceInitialization = true; - -+#ifndef ANGLE_ENABLE_WINDOWS_STORE - // Compositor Native Window capabilies require WinVer >= 1803 - if (CompositorNativeWindow11::IsSupportedWinRelease()) - { - outExtensions->windowsUIComposition = true; - } -+#endif - } - - angle::Result Renderer11::flush(Context11 *context11) -@@ -1270,7 +1272,11 @@ NativeWindowD3D *Renderer11::createNativeWindow(EGLNativeWindowType window, - const egl::Config *config, - const egl::AttributeMap &attribs) const - { -- auto useWinUiComp = window != nullptr && !NativeWindow11Win32::IsValidNativeWindow(window); -+#ifdef ANGLE_ENABLE_WINDOWS_STORE -+ (void)attribs; -+ return new NativeWindow11WinRT(window, config->alphaSize > 0); -+#else -+ auto useWinUiComp = window != nullptr && !isValidNativeWindow(window); - - if (useWinUiComp) - { -@@ -1278,15 +1284,11 @@ NativeWindowD3D *Renderer11::createNativeWindow(EGLNativeWindowType window, - } - else - { --#ifdef ANGLE_ENABLE_WINDOWS_STORE -- UNUSED_VARIABLE(attribs); -- return new NativeWindow11WinRT(window, config->alphaSize > 0); --#else - return new NativeWindow11Win32( - window, config->alphaSize > 0, - attribs.get(EGL_DIRECT_COMPOSITION_ANGLE, EGL_FALSE) == EGL_TRUE); --#endif - } -+#endif - } - - egl::Error Renderer11::getD3DTextureInfo(const egl::Config *configuration, -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -index cb2f279..99b615c 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -@@ -145,6 +145,7 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) - { - if (device == nullptr || factory == nullptr || swapChain == nullptr || width == 0 || -@@ -158,7 +159,7 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, - swapChainDesc.Height = height; - swapChainDesc.Format = format; - swapChainDesc.Stereo = FALSE; -- swapChainDesc.SampleDesc.Count = 1; -+ swapChainDesc.SampleDesc.Count = samples; - swapChainDesc.SampleDesc.Quality = 0; - swapChainDesc.BufferUsage = - DXGI_USAGE_SHADER_INPUT | DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER; -@@ -213,10 +214,10 @@ HRESULT GetCoreWindowSizeInPixels(const ComPtr displayProperties; -+ ComPtr displayProperties; - - if (SUCCEEDED(GetActivationFactory( -- HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayProperties).Get(), -+ HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayInformation).Get(), - displayProperties.GetAddressOf()))) - { - float dpi = 96.0f; -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -index ae57cfb..3262d0a 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -@@ -35,7 +35,8 @@ class CoreWindowNativeWindow : public InspectableNativeWindow, - DXGI_FORMAT format, - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) override; - - protected: -@@ -49,7 +50,7 @@ class CoreWindowNativeWindow : public InspectableNativeWindow, - ComPtr> mPropertyMap; - }; - --[uuid(7F924F66 - EBAE - 40E5 - A10B - B8F35E245190)] class CoreWindowSizeChangedHandler -+[uuid(7F924F66-EBAE-40E5-A10B-B8F35E245190)] class CoreWindowSizeChangedHandler - : public Microsoft::WRL::RuntimeClass< - Microsoft::WRL::RuntimeClassFlags, - IWindowSizeChangedEventHandler> -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -index 708e8a2..9bfa4c4 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -@@ -53,6 +53,7 @@ class InspectableNativeWindow - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) = 0; - - bool getClientRect(RECT *rect) -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp -index 8972ca2..571955d 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp -@@ -88,6 +88,7 @@ HRESULT NativeWindow11WinRT::createSwapChain(ID3D11Device *device, - DXGI_FORMAT format, - UINT width, - UINT height, -+ UINT samples, - IDXGISwapChain **swapChain) - { - if (mImpl) -@@ -95,7 +96,7 @@ HRESULT NativeWindow11WinRT::createSwapChain(ID3D11Device *device, - IDXGIFactory2 *factory2 = d3d11::DynamicCastComObject(factory); - IDXGISwapChain1 *swapChain1 = nullptr; - HRESULT result = -- mImpl->createSwapChain(device, factory2, format, width, height, mHasAlpha, &swapChain1); -+ mImpl->createSwapChain(device, factory2, format, width, height, mHasAlpha, samples, &swapChain1); - SafeRelease(factory2); - *swapChain = static_cast(swapChain1); - return result; -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h -index eac5b21..92c3121 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h -@@ -34,6 +34,7 @@ class NativeWindow11WinRT : public NativeWindow11 - DXGI_FORMAT format, - UINT width, - UINT height, -+ UINT samples, - IDXGISwapChain **swapChain) override; - - void commitChange() override; -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -index af0beb6..2fc32f1 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -@@ -247,6 +247,7 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) - { - if (device == nullptr || factory == nullptr || swapChain == nullptr || width == 0 || -@@ -260,7 +261,7 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, - swapChainDesc.Height = height; - swapChainDesc.Format = format; - swapChainDesc.Stereo = FALSE; -- swapChainDesc.SampleDesc.Count = 1; -+ swapChainDesc.SampleDesc.Count = samples; - swapChainDesc.SampleDesc.Quality = 0; - swapChainDesc.BufferUsage = - DXGI_USAGE_SHADER_INPUT | DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER; -diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -index 09642ee..7fc13da 100644 ---- a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -+++ b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -@@ -28,6 +28,7 @@ class SwapChainPanelNativeWindow : public InspectableNativeWindow, - unsigned int width, - unsigned int height, - bool containsAlpha, -+ unsigned int samples, - IDXGISwapChain1 **swapChain) override; - - protected: -@@ -43,7 +44,7 @@ class SwapChainPanelNativeWindow : public InspectableNativeWindow, - ComPtr mSwapChain; - }; - --[uuid(8ACBD974 - 8187 - 4508 - AD80 - AEC77F93CF36)] class SwapChainPanelSizeChangedHandler -+[uuid(8ACBD974-8187-4508-AD80-AEC77F93CF36)] class SwapChainPanelSizeChangedHandler - : public Microsoft::WRL::RuntimeClass< - Microsoft::WRL::RuntimeClassFlags, - ABI::Windows::UI::Xaml::ISizeChangedEventHandler> --- -2.20.1.windows.1 - diff --git a/depends/windowsstore/angle/CMakeLists.txt b/depends/windowsstore/angle/CMakeLists.txt deleted file mode 100644 index b978815a..00000000 --- a/depends/windowsstore/angle/CMakeLists.txt +++ /dev/null @@ -1,359 +0,0 @@ -cmake_minimum_required(VERSION 3.18) -project(angle) - -message(STATUS "Used CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") -message(STATUS "Used CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}") -message(STATUS "Used CMAKE_HOST_SYSTEM_VERSION: ${CMAKE_HOST_SYSTEM_VERSION}") - -if(CMAKE_SYSTEM_VERSION VERSION_LESS 10.0.16299.0) - message(FATAL_ERROR "Minimal Windows system version must be: 10.0.16299.0") -endif() - -# Force package name to kodi, e.g. BUILD_KODI_ADDON not defined on addon depends build! -if(NOT PACKAGE_NAME) - set(PACKAGE_NAME "kodi") -endif() - -if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) - cmake_policy(SET CMP0076 NEW) -endif() - -option(ANGLE_ENABLE_NULL "Enable null renderer" OFF) -# windows options -option(ANGLE_ENABLE_D3D9 "Enable support D3D9 renderer (Windows desktop only)" OFF) -option(ANGLE_ENABLE_WGL "Enable support OpenGL renderer on Windows" OFF) - -if(CMAKE_SIZEOF_VOID_P EQUAL 4) - add_definitions(-DANGLE_IS_32_BIT_CPU) -elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) - add_definitions(-DANGLE_IS_64_BIT_CPU) -else() - message(FATAL_ERROR "Unknown current CPU bit size: ${CMAKE_SIZEOF_VOID_P}") -endif() - -if(WIN32 AND NOT WINDOWS_STORE) - set(WINDOWS_DESKTOP TRUE) -else() - set(WINDOWS_DESKTOP FALSE) -endif() -if (WINDOWS_DESKTOP OR WINDOWS_STORE) - set(IS_WIN 1) - set(WINDOWS_ANY TRUE) -else() - set(WINDOWS_ANY FALSE) -endif() - -if(UNIX AND NOT APPLE) - set(LINUX TRUE) -else() - set(LINUX FALSE) -endif() - -if(CMAKE_BUILD_TYPE MATCHES DEBUG) - set(IS_DEBUG TRUE) -else() - set(IS_DEBUG FALSE) -endif() - -if(WINDOWS_ANY) - add_compile_options(/d2guard4 /Wv:18 /guard:cf) -else() - add_compile_options(-std=c++17 -fPIC) -endif() - -if(APPLE) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa -framework OpenGL -framework IOKit -framework CoreFoundation -framework IOSurface -framework QuartzCore -framework CoreGraphics") -endif() - -set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") -set(CMAKE_STATIC_LIBRARY_PREFIX "") -set(CMAKE_DEBUG_POSTFIX "_dbg") - -# if BUILD_SHARED_LIBS is undefined comes it to a cmake build error, set it as default to 0. -if(NOT DEFINED BUILD_SHARED_LIBS) - set(BUILD_SHARED_LIBS 0) -endif() - -add_definitions( - -D_CRT_SECURE_NO_DEPRECATE - -D_SCL_SECURE_NO_WARNINGS - -D_HAS_EXCEPTIONS=0 - -DNOMINMAX - -DANGLE_STANDALONE_BUILD) -if(IS_DEBUG) - add_definitions(-DANGLE_ENABLE_DEBUG_ANNOTATIONS) -endif() -if(DCHECK_ALWAYS_ON) - add_definitions(-DANGLE_ENABLE_RELEASE_ASSERTS) -endif() - -# Shared library function visibility -if(IS_WIN) - set(ANGLE_GL_VISIBILITY_CONFIG GL_APICALL= - GL_API=) -else() - set(ANGLE_GL_VISIBILITY_CONFIG GL_APICALL=__attribute__((visibility(\"default\"))) - GL_API=__attribute__((visibility(\"default\")))) -endif() - -# This config controls export definitions on ANGLE API calls. -set(ANGLE_STATIC_DEFINES ANGLE_EXPORT= - ANGLE_UTIL_EXPORT= - EGLAPI= - GL_APICALL= - GL_API=) - -set(GL_PROTOTYPES GL_GLES_PROTOTYPES=1 - EGL_EGL_PROTOTYPES=1 - GL_GLEXT_PROTOTYPES - EGL_EGLEXT_PROTOTYPES - HAS_ANGLE) - -########## -# Generate required commit.h file -set(COMMIT_H - "#define ANGLE_COMMIT_HASH \"invalid-hash\"\n" - "#define ANGLE_COMMIT_HASH_SIZE 12\n" - "#define ANGLE_COMMIT_DATE \"invalid-date\"\n") -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/include/id/commit.h ${COMMIT_H}) -include_directories(include ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_SOURCE_DIR}/src/common/third_party/base - ${CMAKE_CURRENT_BINARY_DIR}/include) - -########## -# Load angle source list by translating *.gni's to cmake format -set(GNI_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/compiler.gni - ${CMAKE_CURRENT_SOURCE_DIR}/src/libGLESv2.gni - ${CMAKE_CURRENT_SOURCE_DIR}/src/libANGLE/renderer/d3d/d3d11/d3d11_blit_shaders_autogen.gni - ${CMAKE_CURRENT_SOURCE_DIR}/util/util.gni) - -set(ANGLE_SOURCE_FILES "") -foreach(file ${GNI_FILES}) - get_filename_component(fullpath "${file}" ABSOLUTE) - get_filename_component(file "${file}" NAME_WE) - - file(READ ${fullpath} CONTENT_GNI) - string(REGEX REPLACE "([0-9a-z_]+)([^a-z]+)([*^\=)])" "set(\\1 XXXYYY \\1 ZZZ" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_win" "IS_WIN" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_linux" "IS_LINUX" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_android" "IS_ANDROID" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_fuchsia" "IS_FUCHSIA" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "is_mac" "IS_MAC" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "||" "OR" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "}" "endif()" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " {" "" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "\"," "" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "\"" "" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " [" "" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "]" ")" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " ZZZ" "}" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "YYY " "{" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE "XXX" "$" CONTENT_GNI ${CONTENT_GNI}) - if(CMAKE_VERSION VERSION_LESS 3.13) - string(REPLACE " src/" " \${CMAKE_CURRENT_SOURCE_DIR}/src/" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " include/" " \${CMAKE_CURRENT_SOURCE_DIR}/include/" CONTENT_GNI ${CONTENT_GNI}) - string(REPLACE " util/" " \${CMAKE_CURRENT_SOURCE_DIR}/util/" CONTENT_GNI ${CONTENT_GNI}) - endif() - file(WRITE ${CMAKE_BINARY_DIR}/angleSourceList-${file}.cmake ${CONTENT_GNI}) - list(APPEND ANGLE_SOURCE_FILES ${CMAKE_BINARY_DIR}/angleSourceList-${file}.cmake) -endforeach() - -foreach(file ${ANGLE_SOURCE_FILES}) - include(${file}) -endforeach() - -########## -# angle::angle_system_utils -add_library(angle_system_utils OBJECT ${angle_system_utils_sources}) -add_library(angle::system_utils ALIAS angle_system_utils) - -########## -# angle::xxhash -add_library(angle_xxhash OBJECT ${xxhash_sources}) -add_library(angle::xxhash ALIAS angle_xxhash) - -########## -# angle::common -add_library(angle_common OBJECT ${libangle_common_sources} - ${libangle_includes} - ${CMAKE_SOURCE_DIR}/src/common/version.h) -add_library(angle::common ALIAS angle_common) - -########## -# angle::image_util -add_library(angle_image_util OBJECT ${libangle_image_util_sources}) -add_library(angle::image_util ALIAS angle_image_util) - -########## -# angle::preprocessor -add_library(angle_preprocessor OBJECT ${angle_preprocessor_sources}) -add_library(angle::preprocessor ALIAS angle_preprocessor) - -########## -# angle::translator -add_library(angle_translator OBJECT ${angle_translator_sources} - ${angle_translator_essl_sources} - ${angle_translator_glsl_sources} - ${angle_translator_hlsl_sources}) -target_compile_definitions(angle_translator PUBLIC ANGLE_ENABLE_ESSL - ANGLE_ENABLE_GLSL - ANGLE_ENABLE_HLSL) -add_library(angle::translator ALIAS angle_translator) - -########## -# libANGLE - -## OpenGL Renderer -if((WINDOWS_DESKTOP AND ANGLE_ENABLE_WGL) OR LINUX OR APPLE) - add_library(angle_renderer_opengl INTERFACE) - if(WINDOWS_DESKTOP) - target_sources(angle_renderer_opengl INTERFACE $ - $) - elseif(APPLE) - target_sources(angle_renderer_opengl INTERFACE $ - $) - elseif(LINUX) - target_sources(angle_renderer_opengl INTERFACE $ - $) - endif() - - target_compile_definitions(angle_renderer_opengl INTERFACE ANGLE_ENABLE_OPENGL) - add_library(angle::renderer::opengl ALIAS angle_renderer_opengl) -endif() - -# D3D Renderers -if(WINDOWS_ANY) - ## WinRT D3D Renderer - if(WINDOWS_STORE) - add_library(angle_renderer_winrt INTERFACE) - target_sources(angle_renderer_winrt INTERFACE $) - target_link_libraries(angle_renderer_winrt INTERFACE d3dcompiler.lib) - add_library(angle::renderer::winrt ALIAS angle_renderer_winrt) - endif() - - ## Win32/d3d9 D3D Renderer - if(WINDOWS_DESKTOP AND ANGLE_ENABLE_D3D9) - add_library(angle_renderer_win32 INTERFACE) - target_sources(angle_renderer_win32 INTERFACE $ - $) - target_compile_definitions(angle_renderer_win32 INTERFACE ANGLE_ENABLE_D3D9) - target_link_libraries(angle_renderer_win32 INTERFACE d3d9.lib) - add_library(angle::renderer::win32 ALIAS angle_renderer_win32) - list(APPEND ANGLE_DEPEND_LIBRARIES d3d9.lib) - endif() - - ## D3D11 Base renderer - add_library(angle_renderer_d3d INTERFACE) - target_sources(angle_renderer_d3d INTERFACE $ - $ - $) - if(WINDOWS_DESKTOP) - target_sources(angle_renderer_d3d INTERFACE $) - endif() - target_compile_definitions(angle_renderer_d3d INTERFACE - ANGLE_ENABLE_D3D11 - "ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={ \"d3dcompiler_47.dll\", \"d3dcompiler_46.dll\", \"d3dcompiler_43.dll\" }" - ) - target_link_libraries(angle_renderer_d3d INTERFACE d3d11.lib dxguid.lib) - add_library(angle::renderer::d3d ALIAS angle_renderer_d3d) - list(APPEND ANGLE_DEPEND_LIBRARIES d3d11.lib dxguid.lib) -endif() - -## Core libANGLE library -if(LINUX OR APPLE) - set(LIBANGLE_RENDERER_PLATFORM - $ - ) -elseif(WINDOWS_STORE) - set(LIBANGLE_RENDERER_PLATFORM - $ - $ - ) -elseif(WINDOWS_DESKTOP) - set(LIBANGLE_RENDERER_PLATFORM - $ - $<$:$> - $<$:$> - gdi32 - ) -else() - set(LIBANGLE_RENDERER_PLATFORM ) -endif() - -if(ANGLE_ENABLE_NULL) - add_library(angle_renderer_null INTERFACE) - target_sources(angle_renderer_null INTERFACE $ - $) - add_library(angle::renderer::null ALIAS angle_renderer_null) - list(APPEND LIBANGLE_RENDERER_PLATFORM $) -endif() - -add_library(libANGLE INTERFACE) -target_sources(libANGLE INTERFACE $ - $ - $ - $ - $ - $ - $) -target_link_libraries(libANGLE INTERFACE ${LIBANGLE_RENDERER_PLATFORM}) -target_include_directories(libANGLE INTERFACE $) -target_compile_definitions(libANGLE INTERFACE LIBANGLE_IMPLEMENTATION - $<$:ANGLE_ENABLE_NULL> - $<$:ANGLE_USE_X11>) -add_library(angle::libANGLE ALIAS libANGLE) - -########## -# libGLESv2 -add_library(libGLESv2 ${libglesv2_sources} - ${libangle_includes} - ${CMAKE_CURRENT_SOURCE_DIR}/src/libGLESv2/libGLESv2_autogen.def) -target_link_libraries(libGLESv2 PRIVATE $ - ${ANGLE_DEPEND_LIBRARIES}) -if(BUILD_SHARED_LIBS) - target_compile_definitions(libGLESv2 PRIVATE LIBGLESV2_IMPLEMENTATION - ${GL_PROTOTYPES} - ${ANGLE_GL_VISIBILITY_CONFIG}) -else() - target_compile_definitions(libGLESv2 PRIVATE LIBGLESV2_IMPLEMENTATION - ${GL_PROTOTYPES} - PUBLIC ${ANGLE_STATIC_DEFINES}) -endif() -target_include_directories(libGLESv2 PUBLIC $) -target_compile_definitions(libGLESv2 PUBLIC $) - -########## -# libEGL -add_library(libEGL ${libegl_sources} - ${libangle_includes} - $<$:${CMAKE_CURRENT_SOURCE_DIR}/src/libEGL/libEGL.def>) -target_link_libraries(libEGL PUBLIC libGLESv2) -target_include_directories(libEGL PUBLIC $) - -########## -# Angle installation -set_target_properties(libGLESv2 PROPERTIES PREFIX "") -set_target_properties(libEGL PROPERTIES PREFIX "") - -install(TARGETS libGLESv2 - libEGL - EXPORT ANGLEExport - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) - -install(EXPORT ANGLEExport - FILE ${PACKAGE_NAME}-angle-config.cmake - NAMESPACE ${PACKAGE_NAME}::angle:: - DESTINATION share/${PACKAGE_NAME}-angle) - -if(NOT DISABLE_INSTALL_HEADERS) - install(DIRECTORY include/ - DESTINATION include - FILES_MATCHING - PATTERN "*.h" - PATTERN "*.inc" - PATTERN "GLSLANG" EXCLUDE - PATTERN "export.h" EXCLUDE) -endif() diff --git a/depends/windowsstore/angle/angle.sha256 b/depends/windowsstore/angle/angle.sha256 deleted file mode 100644 index 31d00b2c..00000000 --- a/depends/windowsstore/angle/angle.sha256 +++ /dev/null @@ -1 +0,0 @@ -28836135bd7549c01d7d07ae5a0a0956096f2c63355cf243ef306b2213bd91ae diff --git a/depends/windowsstore/angle/angle.txt b/depends/windowsstore/angle/angle.txt deleted file mode 100644 index e9c9ff30..00000000 --- a/depends/windowsstore/angle/angle.txt +++ /dev/null @@ -1 +0,0 @@ -angle https://github.com/google/angle/archive/chromium/3712.tar.gz diff --git a/depends/windowsstore/dirent/0001-change-dirent.h-install-path.patch b/depends/windowsstore/dirent/0001-change-dirent.h-install-path.patch deleted file mode 100644 index 6cf04892..00000000 --- a/depends/windowsstore/dirent/0001-change-dirent.h-install-path.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 5e394b992d95e5a8ca4ba7aa3c3b91a84b8ce839 Mon Sep 17 00:00:00 2001 -From: Alwin Esch -Date: Wed, 20 May 2026 10:57:05 +0200 -Subject: [PATCH] change dirent.h install path - ---- - CMakeLists.txt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 8bc6205..7b6667b 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -74,7 +74,7 @@ install( - FILES - include/dirent.h - DESTINATION -- include/dirent-${DIRENT_VERSION} -+ include - COMPONENT - dev - ) --- -2.53.0 - diff --git a/depends/windowsstore/dirent/dirent.sha256 b/depends/windowsstore/dirent/dirent.sha256 deleted file mode 100644 index f4cdb9b8..00000000 --- a/depends/windowsstore/dirent/dirent.sha256 +++ /dev/null @@ -1 +0,0 @@ -6ffcc318f00be192acb611c58aa58ee0cfd96776010680d7f38cf24f3dd8baf9 diff --git a/depends/windowsstore/dirent/dirent.txt b/depends/windowsstore/dirent/dirent.txt deleted file mode 100644 index f9627a21..00000000 --- a/depends/windowsstore/dirent/dirent.txt +++ /dev/null @@ -1 +0,0 @@ -dirent https://github.com/tronkko/dirent/archive/1.26.zip diff --git a/depends/windowsstore/dirent/flags.txt b/depends/windowsstore/dirent/flags.txt deleted file mode 100644 index 4fa8e78e..00000000 --- a/depends/windowsstore/dirent/flags.txt +++ /dev/null @@ -1 +0,0 @@ --DDIRENT_TESTS=OFF -DDIRENT_EXAMPLES=OFF \ No newline at end of file diff --git a/depends/windowsstore/dlfcn-win32/0001-win10-fixed-uwp-build.patch b/depends/windowsstore/dlfcn-win32/0001-win10-fixed-uwp-build.patch deleted file mode 100644 index 69f346ad..00000000 --- a/depends/windowsstore/dlfcn-win32/0001-win10-fixed-uwp-build.patch +++ /dev/null @@ -1,148 +0,0 @@ -From f85366b1044fff7b4ea9162c3edcd8278c3e06ff Mon Sep 17 00:00:00 2001 -From: Alwin Esch -Date: Thu, 22 Aug 2019 19:30:12 +0100 -Subject: [PATCH] [win10] fixed uwp build - ---- - -diff --git a/src/dlfcn.c b/src/dlfcn.c -index cb9f9bb..b26b404 100644 ---- a/src/dlfcn.c -+++ b/src/dlfcn.c -@@ -24,6 +24,7 @@ - * THE SOFTWARE. - */ - -+#define _CRT_SECURE_NO_WARNINGS - #ifdef _DEBUG - #define _CRTDBG_MAP_ALLOC - #include -@@ -311,6 +312,7 @@ static HMODULE MyGetModuleHandleFromAddress( const void *addr ) - /* Load Psapi.dll at runtime, this avoids linking caveat */ - static BOOL MyEnumProcessModules( HANDLE hProcess, HMODULE *lphModule, DWORD cb, LPDWORD lpcbNeeded ) - { -+#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY != WINAPI_FAMILY_APP) - static BOOL (WINAPI *EnumProcessModulesPtr)(HANDLE, HMODULE *, DWORD, LPDWORD) = NULL; - static BOOL failed = FALSE; - UINT uMode; -@@ -349,21 +351,27 @@ static BOOL MyEnumProcessModules( HANDLE hProcess, HMODULE *lphModule, DWORD cb, - } - - return EnumProcessModulesPtr( hProcess, lphModule, cb, lpcbNeeded ); -+#else -+ return 0; -+#endif - } - - DLFCN_EXPORT - void *dlopen( const char *file, int mode ) - { -- HMODULE hModule; -- UINT uMode; -+ HMODULE hModule = NULL; -+ UINT uMode = 0; - - error_occurred = FALSE; - - /* Do not let Windows display the critical-error-handler message box */ -+#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY != WINAPI_FAMILY_APP) - uMode = MySetErrorMode( SEM_FAILCRITICALERRORS ); -+#endif - - if( file == NULL ) - { -+#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY != WINAPI_FAMILY_APP) // what is replacement of GMH on UWP? - /* POSIX says that if the value of file is NULL, a handle on a global - * symbol object must be provided. That object must be able to access - * all symbols from the original program file, and any objects loaded -@@ -378,6 +386,7 @@ void *dlopen( const char *file, int mode ) - - if( !hModule ) - save_err_str( "(null)", GetLastError( ) ); -+#endif - } - else - { -@@ -415,6 +424,23 @@ void *dlopen( const char *file, int mode ) - * to UNIX's search paths (start with system folders instead of current - * folder). - */ -+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) -+ int result = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, lpFileName, strlen(lpFileName), NULL, 0); -+ if (result == 0) -+ return NULL; -+ -+ wchar_t* newStr = (wchar_t*)malloc(result*sizeof(wchar_t)); -+ result = MultiByteToWideChar( CP_UTF8, MB_ERR_INVALID_CHARS, lpFileName, strlen(lpFileName), newStr, result ); -+ if (result == 0) -+ { -+ free( newStr ); -+ return NULL; -+ } -+ -+ hModule = LoadPackagedLibrary( newStr, 0 ); -+ free( newStr ); -+ dwProcModsAfter = 0; -+#else // WINAPI_PARTITION_DESKTOP - hModule = LoadLibraryExA( lpFileName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ); - - if( !hModule ) -@@ -449,11 +475,14 @@ void *dlopen( const char *file, int mode ) - local_rem( hModule ); - } - } -+#endif - } - } - - /* Return to previous state of the error-mode bit flags. */ -+#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY != WINAPI_FAMILY_APP) - MySetErrorMode( uMode ); -+#endif - - return (void *) hModule; - } -@@ -488,15 +517,16 @@ void *dlsym( void *handle, const char *name ) - { - FARPROC symbol; - HMODULE hCaller; -- HMODULE hModule; -+ HMODULE hModule = 0; - DWORD dwMessageId; - - error_occurred = FALSE; - - symbol = NULL; -+ dwMessageId = 0; - hCaller = NULL; -+#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY != WINAPI_FAMILY_APP) // what is replacement of GMH on UWP? - hModule = GetModuleHandle( NULL ); -- dwMessageId = 0; - - if( handle == RTLD_DEFAULT ) - { -@@ -525,6 +555,7 @@ void *dlsym( void *handle, const char *name ) - goto end; - } - } -+#endif - - if( handle != RTLD_NEXT ) - { -@@ -537,7 +568,7 @@ void *dlsym( void *handle, const char *name ) - /* If the handle for the original program file is passed, also search - * in all globally loaded objects. - */ -- -+#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY != WINAPI_FAMILY_APP) - if( hModule == handle || handle == RTLD_NEXT ) - { - HANDLE hCurrentProc; -@@ -588,6 +619,7 @@ void *dlsym( void *handle, const char *name ) - } - } - } -+#endif - - end: - if( symbol == NULL ) diff --git a/depends/windowsstore/dlfcn-win32/dlfcn-win32.sha256 b/depends/windowsstore/dlfcn-win32/dlfcn-win32.sha256 deleted file mode 100644 index 4d789d7f..00000000 --- a/depends/windowsstore/dlfcn-win32/dlfcn-win32.sha256 +++ /dev/null @@ -1 +0,0 @@ -f61a874bc9163ab488accb364fd681d109870c86e8071f4710cbcdcbaf9f2565 diff --git a/depends/windowsstore/dlfcn-win32/dlfcn-win32.txt b/depends/windowsstore/dlfcn-win32/dlfcn-win32.txt deleted file mode 100644 index e4993f72..00000000 --- a/depends/windowsstore/dlfcn-win32/dlfcn-win32.txt +++ /dev/null @@ -1 +0,0 @@ -dlfcn-win32 https://github.com/dlfcn-win32/dlfcn-win32/archive/v1.4.2.tar.gz diff --git a/depends/windowsstore/dlfcn-win32/flags.txt b/depends/windowsstore/dlfcn-win32/flags.txt deleted file mode 100644 index 3cb0a00e..00000000 --- a/depends/windowsstore/dlfcn-win32/flags.txt +++ /dev/null @@ -1 +0,0 @@ --DBUILD_SHARED_LIBS=OFF 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 928d13c3..00000000 --- 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 be670f5e..00000000 --- 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 b2dcdc60..00000000 --- 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 75aecafc..00000000 --- a/depends/windowsstore/projectm/CMakeLists.txt +++ /dev/null @@ -1,209 +0,0 @@ -cmake_minimum_required(VERSION 3.18) -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 deleted file mode 100644 index 0a8e6015..00000000 --- a/depends/windowsstore/projectm/deps.txt +++ /dev/null @@ -1,4 +0,0 @@ -angle -glm -dirent -dlfcn-win32 diff --git a/depends/windowsstore/projectm/projectm.sha256 b/depends/windowsstore/projectm/projectm.sha256 deleted file mode 100644 index 9199e60b..00000000 --- a/depends/windowsstore/projectm/projectm.sha256 +++ /dev/null @@ -1 +0,0 @@ -b6b99dde5c8f0822ae362606a0429628ee478f4ec943a156723841b742954707 diff --git a/depends/windowsstore/projectm/projectm.txt b/depends/windowsstore/projectm/projectm.txt deleted file mode 100644 index c8995033..00000000 --- a/depends/windowsstore/projectm/projectm.txt +++ /dev/null @@ -1 +0,0 @@ -projectm https://github.com/projectM-visualizer/projectm/releases/download/v3.1.12/projectM-3.1.12.tar.gz From 448660d006534bf2ae3f4ab38ae24a0c2e337ad9 Mon Sep 17 00:00:00 2001 From: Alwin Esch Date: Sun, 14 Jun 2026 12:22:38 +0200 Subject: [PATCH 13/13] increase add-on version to 22.2.0 --- visualization.projectm/addon.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visualization.projectm/addon.xml.in b/visualization.projectm/addon.xml.in index 05e355bc..d13fbac6 100644 --- a/visualization.projectm/addon.xml.in +++ b/visualization.projectm/addon.xml.in @@ -1,7 +1,7 @@  @ADDON_DEPENDS@