From e735fc1b6f15c1c95b2b6dbdb03610af8547fafd Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 00:21:42 +0000 Subject: [PATCH 1/9] Fix Vulkan and Oboe support on Android --- external/osu-framework | 1 + oboe_patch.txt | 25 ++ osu.Android.props | 2 +- osu.Android.slnf | 5 +- osu.Android/OboeAudioRedirector.cs | 6 + osu.Android/OsuGameAndroid.cs | 3 +- osu.Game/OsuGameBase.cs | 1 + .../Sections/Graphics/RendererSettings.cs | 3 +- osu.Game/osu.Game.csproj | 2 +- osu.sln | 380 ++++++++++++++++-- osu_game_patch.txt | 11 + renderer_settings_patch.txt | 22 + 12 files changed, 429 insertions(+), 32 deletions(-) create mode 160000 external/osu-framework create mode 100644 oboe_patch.txt create mode 100644 osu_game_patch.txt create mode 100644 renderer_settings_patch.txt diff --git a/external/osu-framework b/external/osu-framework new file mode 160000 index 000000000000..03d869d74a95 --- /dev/null +++ b/external/osu-framework @@ -0,0 +1 @@ +Subproject commit 03d869d74a95ef10944785078e9e6bae17b3e995 diff --git a/oboe_patch.txt b/oboe_patch.txt new file mode 100644 index 000000000000..6061ed24951c --- /dev/null +++ b/oboe_patch.txt @@ -0,0 +1,25 @@ +<<<<<<< SEARCH + addRootMixer(audioManager.TrackMixer); + addRootMixer(audioManager.SampleMixer); + + if (mixerHandles.Count == 0) + { + addMixer(audioManager.TrackMixer); + addMixer(audioManager.SampleMixer); + } +======= + addRootMixer(audioManager.TrackMixer); + addRootMixer(audioManager.SampleMixer); + + foreach (var mixer in audioManager.ActiveMixers) + addRootMixer(mixer); + + if (mixerHandles.Count == 0) + { + addMixer(audioManager.TrackMixer); + addMixer(audioManager.SampleMixer); + + foreach (var mixer in audioManager.ActiveMixers) + addMixer(mixer); + } +>>>>>>> REPLACE diff --git a/osu.Android.props b/osu.Android.props index 9ad425da8662..a17389fad470 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -31,7 +31,7 @@ This is safe because .NET guarantees backward compatibility for loading net8.0 assemblies in a net10.0 runtime, and Android API changes between 34→36 are additive. TODO: Remove this comment once ppy.osu.Framework.Android ships net10.0-android assets. --> - + diff --git a/osu.sln b/osu.sln index 63da18c23ee6..05ce0c3768b3 100644 --- a/osu.sln +++ b/osu.sln @@ -100,164 +100,505 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeAnalysis", "CodeAnalysi CodeAnalysis\osu.globalconfig = CodeAnalysis\osu.globalconfig EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "external", "external", "{A288BEE0-695A-BEEA-455C-649571D89326}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "osu-framework", "osu-framework", "{1C635F9F-56C2-E55F-1582-090CF138E5B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework", "external\osu-framework\osu.Framework\osu.Framework.csproj", "{4A7CC044-B73D-4600-82FD-B2C017543CE8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework.NativeLibs", "external\osu-framework\osu.Framework.NativeLibs\osu.Framework.NativeLibs.csproj", "{7F24B1B8-95AA-4E18-998E-01CF73D33377}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework.Android", "external\osu-framework\osu.Framework.Android\osu.Framework.Android.csproj", "{29193C83-54F5-449F-85A5-77A0952A4E6A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|x64.ActiveCfg = Debug|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|x64.Build.0 = Debug|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|x86.ActiveCfg = Debug|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|x86.Build.0 = Debug|Any CPU {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|Any CPU.ActiveCfg = Release|Any CPU {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|Any CPU.Build.0 = Release|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|x64.ActiveCfg = Release|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|x64.Build.0 = Release|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|x86.ActiveCfg = Release|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|x86.Build.0 = Release|Any CPU {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|x64.ActiveCfg = Debug|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|x64.Build.0 = Debug|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|x86.ActiveCfg = Debug|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|x86.Build.0 = Debug|Any CPU {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|Any CPU.ActiveCfg = Release|Any CPU {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|Any CPU.Build.0 = Release|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|x64.ActiveCfg = Release|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|x64.Build.0 = Release|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|x86.ActiveCfg = Release|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|x86.Build.0 = Release|Any CPU {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Debug|x64.ActiveCfg = Debug|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Debug|x64.Build.0 = Debug|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Debug|x86.ActiveCfg = Debug|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Debug|x86.Build.0 = Debug|Any CPU {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Release|Any CPU.ActiveCfg = Release|Any CPU {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Release|Any CPU.Build.0 = Release|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Release|x64.ActiveCfg = Release|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Release|x64.Build.0 = Release|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Release|x86.ActiveCfg = Release|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Release|x86.Build.0 = Release|Any CPU {F167E17A-7DE6-4AF5-B920-A5112296C695}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F167E17A-7DE6-4AF5-B920-A5112296C695}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Debug|x64.ActiveCfg = Debug|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Debug|x64.Build.0 = Debug|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Debug|x86.ActiveCfg = Debug|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Debug|x86.Build.0 = Debug|Any CPU {F167E17A-7DE6-4AF5-B920-A5112296C695}.Release|Any CPU.ActiveCfg = Release|Any CPU {F167E17A-7DE6-4AF5-B920-A5112296C695}.Release|Any CPU.Build.0 = Release|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Release|x64.ActiveCfg = Release|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Release|x64.Build.0 = Release|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Release|x86.ActiveCfg = Release|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Release|x86.Build.0 = Release|Any CPU {48F4582B-7687-4621-9CBE-5C24197CB536}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {48F4582B-7687-4621-9CBE-5C24197CB536}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Debug|x64.ActiveCfg = Debug|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Debug|x64.Build.0 = Debug|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Debug|x86.ActiveCfg = Debug|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Debug|x86.Build.0 = Debug|Any CPU {48F4582B-7687-4621-9CBE-5C24197CB536}.Release|Any CPU.ActiveCfg = Release|Any CPU {48F4582B-7687-4621-9CBE-5C24197CB536}.Release|Any CPU.Build.0 = Release|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Release|x64.ActiveCfg = Release|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Release|x64.Build.0 = Release|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Release|x86.ActiveCfg = Release|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Release|x86.Build.0 = Release|Any CPU {54377672-20B1-40AF-8087-5CF73BF3953A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {54377672-20B1-40AF-8087-5CF73BF3953A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54377672-20B1-40AF-8087-5CF73BF3953A}.Debug|x64.ActiveCfg = Debug|Any CPU + {54377672-20B1-40AF-8087-5CF73BF3953A}.Debug|x64.Build.0 = Debug|Any CPU + {54377672-20B1-40AF-8087-5CF73BF3953A}.Debug|x86.ActiveCfg = Debug|Any CPU + {54377672-20B1-40AF-8087-5CF73BF3953A}.Debug|x86.Build.0 = Debug|Any CPU {54377672-20B1-40AF-8087-5CF73BF3953A}.Release|Any CPU.ActiveCfg = Release|Any CPU {54377672-20B1-40AF-8087-5CF73BF3953A}.Release|Any CPU.Build.0 = Release|Any CPU + {54377672-20B1-40AF-8087-5CF73BF3953A}.Release|x64.ActiveCfg = Release|Any CPU + {54377672-20B1-40AF-8087-5CF73BF3953A}.Release|x64.Build.0 = Release|Any CPU + {54377672-20B1-40AF-8087-5CF73BF3953A}.Release|x86.ActiveCfg = Release|Any CPU + {54377672-20B1-40AF-8087-5CF73BF3953A}.Release|x86.Build.0 = Release|Any CPU {419659FD-72EA-4678-9EB8-B22A746CED70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {419659FD-72EA-4678-9EB8-B22A746CED70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {419659FD-72EA-4678-9EB8-B22A746CED70}.Debug|x64.ActiveCfg = Debug|Any CPU + {419659FD-72EA-4678-9EB8-B22A746CED70}.Debug|x64.Build.0 = Debug|Any CPU + {419659FD-72EA-4678-9EB8-B22A746CED70}.Debug|x86.ActiveCfg = Debug|Any CPU + {419659FD-72EA-4678-9EB8-B22A746CED70}.Debug|x86.Build.0 = Debug|Any CPU {419659FD-72EA-4678-9EB8-B22A746CED70}.Release|Any CPU.ActiveCfg = Release|Any CPU {419659FD-72EA-4678-9EB8-B22A746CED70}.Release|Any CPU.Build.0 = Release|Any CPU + {419659FD-72EA-4678-9EB8-B22A746CED70}.Release|x64.ActiveCfg = Release|Any CPU + {419659FD-72EA-4678-9EB8-B22A746CED70}.Release|x64.Build.0 = Release|Any CPU + {419659FD-72EA-4678-9EB8-B22A746CED70}.Release|x86.ActiveCfg = Release|Any CPU + {419659FD-72EA-4678-9EB8-B22A746CED70}.Release|x86.Build.0 = Release|Any CPU {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Debug|x64.ActiveCfg = Debug|Any CPU + {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Debug|x64.Build.0 = Debug|Any CPU + {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Debug|x86.ActiveCfg = Debug|Any CPU + {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Debug|x86.Build.0 = Debug|Any CPU {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Release|Any CPU.ActiveCfg = Release|Any CPU {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Release|Any CPU.Build.0 = Release|Any CPU + {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Release|x64.ActiveCfg = Release|Any CPU + {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Release|x64.Build.0 = Release|Any CPU + {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Release|x86.ActiveCfg = Release|Any CPU + {3AD63355-D6B1-4365-8D31-5652C989BEF1}.Release|x86.Build.0 = Release|Any CPU {7E9E9C34-B204-406B-82E2-E01E900699CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7E9E9C34-B204-406B-82E2-E01E900699CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E9E9C34-B204-406B-82E2-E01E900699CD}.Debug|x64.ActiveCfg = Debug|Any CPU + {7E9E9C34-B204-406B-82E2-E01E900699CD}.Debug|x64.Build.0 = Debug|Any CPU + {7E9E9C34-B204-406B-82E2-E01E900699CD}.Debug|x86.ActiveCfg = Debug|Any CPU + {7E9E9C34-B204-406B-82E2-E01E900699CD}.Debug|x86.Build.0 = Debug|Any CPU {7E9E9C34-B204-406B-82E2-E01E900699CD}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E9E9C34-B204-406B-82E2-E01E900699CD}.Release|Any CPU.Build.0 = Release|Any CPU + {7E9E9C34-B204-406B-82E2-E01E900699CD}.Release|x64.ActiveCfg = Release|Any CPU + {7E9E9C34-B204-406B-82E2-E01E900699CD}.Release|x64.Build.0 = Release|Any CPU + {7E9E9C34-B204-406B-82E2-E01E900699CD}.Release|x86.ActiveCfg = Release|Any CPU + {7E9E9C34-B204-406B-82E2-E01E900699CD}.Release|x86.Build.0 = Release|Any CPU {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Debug|x64.ActiveCfg = Debug|Any CPU + {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Debug|x64.Build.0 = Debug|Any CPU + {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Debug|x86.ActiveCfg = Debug|Any CPU + {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Debug|x86.Build.0 = Debug|Any CPU {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Release|Any CPU.ActiveCfg = Release|Any CPU {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Release|Any CPU.Build.0 = Release|Any CPU + {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Release|x64.ActiveCfg = Release|Any CPU + {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Release|x64.Build.0 = Release|Any CPU + {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Release|x86.ActiveCfg = Release|Any CPU + {B698561F-FB28-46B1-857E-3CA7B92F9D70}.Release|x86.Build.0 = Release|Any CPU {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Debug|x64.ActiveCfg = Debug|Any CPU + {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Debug|x64.Build.0 = Debug|Any CPU + {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Debug|x86.ActiveCfg = Debug|Any CPU + {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Debug|x86.Build.0 = Debug|Any CPU {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Release|Any CPU.Build.0 = Release|Any CPU + {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Release|x64.ActiveCfg = Release|Any CPU + {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Release|x64.Build.0 = Release|Any CPU + {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Release|x86.ActiveCfg = Release|Any CPU + {6A2D5D58-0261-4A75-BE84-2BE8B076B7C2}.Release|x86.Build.0 = Release|Any CPU {5672CA4D-1B37-425B-A118-A8DA26E78938}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5672CA4D-1B37-425B-A118-A8DA26E78938}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5672CA4D-1B37-425B-A118-A8DA26E78938}.Debug|x64.ActiveCfg = Debug|Any CPU + {5672CA4D-1B37-425B-A118-A8DA26E78938}.Debug|x64.Build.0 = Debug|Any CPU + {5672CA4D-1B37-425B-A118-A8DA26E78938}.Debug|x86.ActiveCfg = Debug|Any CPU + {5672CA4D-1B37-425B-A118-A8DA26E78938}.Debug|x86.Build.0 = Debug|Any CPU {5672CA4D-1B37-425B-A118-A8DA26E78938}.Release|Any CPU.ActiveCfg = Release|Any CPU {5672CA4D-1B37-425B-A118-A8DA26E78938}.Release|Any CPU.Build.0 = Release|Any CPU + {5672CA4D-1B37-425B-A118-A8DA26E78938}.Release|x64.ActiveCfg = Release|Any CPU + {5672CA4D-1B37-425B-A118-A8DA26E78938}.Release|x64.Build.0 = Release|Any CPU + {5672CA4D-1B37-425B-A118-A8DA26E78938}.Release|x86.ActiveCfg = Release|Any CPU + {5672CA4D-1B37-425B-A118-A8DA26E78938}.Release|x86.Build.0 = Release|Any CPU {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Debug|x64.ActiveCfg = Debug|Any CPU + {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Debug|x64.Build.0 = Debug|Any CPU + {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Debug|x86.ActiveCfg = Debug|Any CPU + {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Debug|x86.Build.0 = Debug|Any CPU {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|Any CPU.ActiveCfg = Release|Any CPU {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|Any CPU.Build.0 = Release|Any CPU - {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Release|Any CPU.Build.0 = Release|Any CPU + {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|x64.ActiveCfg = Release|Any CPU + {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|x64.Build.0 = Release|Any CPU + {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|x86.ActiveCfg = Release|Any CPU + {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|x86.Build.0 = Release|Any CPU {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65FF8E19-6934-469B-B690-23C6D6E56A17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65FF8E19-6934-469B-B690-23C6D6E56A17}.Release|Any CPU.Build.0 = Release|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Debug|x64.ActiveCfg = Debug|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Debug|x64.Build.0 = Debug|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Debug|x86.ActiveCfg = Debug|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Debug|x86.Build.0 = Debug|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Release|Any CPU.Build.0 = Release|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Release|x64.ActiveCfg = Release|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Release|x64.Build.0 = Release|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Release|x86.ActiveCfg = Release|Any CPU + {3F082D0B-A964-43D7-BDF7-C256D76A50D0}.Release|x86.Build.0 = Release|Any CPU {65FF8E19-6934-469B-B690-23C6D6E56A17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {65FF8E19-6934-469B-B690-23C6D6E56A17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E408809-66AC-49D1-AF4D-98834F9B979A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E408809-66AC-49D1-AF4D-98834F9B979A}.Release|Any CPU.Build.0 = Release|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Debug|x64.ActiveCfg = Debug|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Debug|x64.Build.0 = Debug|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Debug|x86.ActiveCfg = Debug|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Debug|x86.Build.0 = Debug|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Release|Any CPU.Build.0 = Release|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Release|x64.ActiveCfg = Release|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Release|x64.Build.0 = Release|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Release|x86.ActiveCfg = Release|Any CPU + {65FF8E19-6934-469B-B690-23C6D6E56A17}.Release|x86.Build.0 = Release|Any CPU {7E408809-66AC-49D1-AF4D-98834F9B979A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7E408809-66AC-49D1-AF4D-98834F9B979A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Release|Any CPU.Build.0 = Release|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Debug|x64.ActiveCfg = Debug|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Debug|x64.Build.0 = Debug|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Debug|x86.ActiveCfg = Debug|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Debug|x86.Build.0 = Debug|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Release|Any CPU.Build.0 = Release|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Release|x64.ActiveCfg = Release|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Release|x64.Build.0 = Release|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Release|x86.ActiveCfg = Release|Any CPU + {7E408809-66AC-49D1-AF4D-98834F9B979A}.Release|x86.Build.0 = Release|Any CPU {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Release|Any CPU.Build.0 = Release|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Debug|x64.ActiveCfg = Debug|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Debug|x64.Build.0 = Debug|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Debug|x86.ActiveCfg = Debug|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Debug|x86.Build.0 = Debug|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Release|Any CPU.Build.0 = Release|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Release|x64.ActiveCfg = Release|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Release|x64.Build.0 = Release|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Release|x86.ActiveCfg = Release|Any CPU + {6653CA6F-DB06-4604-A3FD-762E25C2AF96}.Release|x86.Build.0 = Release|Any CPU {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Release|Any CPU.Build.0 = Release|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Debug|x64.ActiveCfg = Debug|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Debug|x64.Build.0 = Debug|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Debug|x86.ActiveCfg = Debug|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Debug|x86.Build.0 = Debug|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Release|Any CPU.Build.0 = Release|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Release|x64.ActiveCfg = Release|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Release|x64.Build.0 = Release|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Release|x86.ActiveCfg = Release|Any CPU + {39FD990E-B6CE-4B2A-999F-BC008CF2C64C}.Release|x86.Build.0 = Release|Any CPU {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Debug|x64.ActiveCfg = Debug|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Debug|x64.Build.0 = Debug|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Debug|x86.ActiveCfg = Debug|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Debug|x86.Build.0 = Debug|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Release|Any CPU.Build.0 = Release|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Release|x64.ActiveCfg = Release|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Release|x64.Build.0 = Release|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Release|x86.ActiveCfg = Release|Any CPU + {4004C7B7-1A62-43F1-9DF2-52450FA67E70}.Release|x86.Build.0 = Release|Any CPU {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|x64.ActiveCfg = Debug|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|x64.Build.0 = Debug|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|x86.ActiveCfg = Debug|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|x86.Build.0 = Debug|Any CPU {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|Any CPU.Build.0 = Release|Any CPU {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|x64.ActiveCfg = Release|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|x64.Build.0 = Release|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|x86.ActiveCfg = Release|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|x86.Build.0 = Release|Any CPU {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|x64.ActiveCfg = Debug|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|x64.Build.0 = Debug|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|x86.ActiveCfg = Debug|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|x86.Build.0 = Debug|Any CPU {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|Any CPU.ActiveCfg = Release|Any CPU {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|Any CPU.Build.0 = Release|Any CPU {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|x64.ActiveCfg = Release|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|x64.Build.0 = Release|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|x86.ActiveCfg = Release|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|x86.Build.0 = Release|Any CPU {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|Any CPU.Build.0 = Debug|Any CPU {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|x64.ActiveCfg = Debug|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|x64.Build.0 = Debug|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|x86.ActiveCfg = Debug|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|x86.Build.0 = Debug|Any CPU {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|Any CPU.ActiveCfg = Release|Any CPU {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|Any CPU.Build.0 = Release|Any CPU {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|Any CPU.Deploy.0 = Release|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|x64.ActiveCfg = Release|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|x64.Build.0 = Release|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|x86.ActiveCfg = Release|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|x86.Build.0 = Release|Any CPU {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|Any CPU.Build.0 = Debug|Any CPU {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|x64.ActiveCfg = Debug|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|x64.Build.0 = Debug|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|x86.ActiveCfg = Debug|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|x86.Build.0 = Debug|Any CPU {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|Any CPU.ActiveCfg = Release|Any CPU {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|Any CPU.Build.0 = Release|Any CPU {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|x64.ActiveCfg = Release|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|x64.Build.0 = Release|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|x86.ActiveCfg = Release|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|x86.Build.0 = Release|Any CPU {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|Any CPU.Build.0 = Debug|Any CPU {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|x64.ActiveCfg = Debug|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|x64.Build.0 = Debug|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|x86.ActiveCfg = Debug|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|x86.Build.0 = Debug|Any CPU {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.ActiveCfg = Release|Any CPU {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.Build.0 = Release|Any CPU {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|x64.ActiveCfg = Release|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|x64.Build.0 = Release|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|x86.ActiveCfg = Release|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|x86.Build.0 = Release|Any CPU {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|Any CPU.Build.0 = Debug|Any CPU {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|x64.ActiveCfg = Debug|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|x64.Build.0 = Debug|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|x86.ActiveCfg = Debug|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|x86.Build.0 = Debug|Any CPU {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|Any CPU.ActiveCfg = Release|Any CPU {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|Any CPU.Build.0 = Release|Any CPU {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|x64.ActiveCfg = Release|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|x64.Build.0 = Release|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|x86.ActiveCfg = Release|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|x86.Build.0 = Release|Any CPU {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Debug|Any CPU.Build.0 = Debug|Any CPU + {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Debug|x64.ActiveCfg = Debug|Any CPU + {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Debug|x64.Build.0 = Debug|Any CPU + {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Debug|x86.ActiveCfg = Debug|Any CPU + {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Debug|x86.Build.0 = Debug|Any CPU {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Release|Any CPU.ActiveCfg = Release|Any CPU {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Release|Any CPU.Build.0 = Release|Any CPU + {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Release|x64.ActiveCfg = Release|Any CPU + {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Release|x64.Build.0 = Release|Any CPU + {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Release|x86.ActiveCfg = Release|Any CPU + {93632F2D-2BB4-46C1-A7B8-F8CF2FB27118}.Release|x86.Build.0 = Release|Any CPU {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Debug|x64.ActiveCfg = Debug|Any CPU + {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Debug|x64.Build.0 = Debug|Any CPU + {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Debug|x86.ActiveCfg = Debug|Any CPU + {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Debug|x86.Build.0 = Debug|Any CPU {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Release|Any CPU.ActiveCfg = Release|Any CPU {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Release|Any CPU.Build.0 = Release|Any CPU + {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Release|x64.ActiveCfg = Release|Any CPU + {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Release|x64.Build.0 = Release|Any CPU + {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Release|x86.ActiveCfg = Release|Any CPU + {9014CA66-5217-49F6-8C1E-3430FD08EF61}.Release|x86.Build.0 = Release|Any CPU {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Debug|x64.ActiveCfg = Debug|Any CPU + {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Debug|x64.Build.0 = Debug|Any CPU + {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Debug|x86.ActiveCfg = Debug|Any CPU + {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Debug|x86.Build.0 = Debug|Any CPU {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Release|Any CPU.ActiveCfg = Release|Any CPU {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Release|Any CPU.Build.0 = Release|Any CPU + {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Release|x64.ActiveCfg = Release|Any CPU + {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Release|x64.Build.0 = Release|Any CPU + {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Release|x86.ActiveCfg = Release|Any CPU + {561DFD5E-5896-40D1-9708-4D692F5BAE66}.Release|x86.Build.0 = Release|Any CPU {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Debug|x64.ActiveCfg = Debug|Any CPU + {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Debug|x64.Build.0 = Debug|Any CPU + {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Debug|x86.ActiveCfg = Debug|Any CPU + {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Debug|x86.Build.0 = Debug|Any CPU {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Release|Any CPU.Build.0 = Release|Any CPU + {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Release|x64.ActiveCfg = Release|Any CPU + {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Release|x64.Build.0 = Release|Any CPU + {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Release|x86.ActiveCfg = Release|Any CPU + {B325271C-85E7-4DB3-8BBB-B70F242954F8}.Release|x86.Build.0 = Release|Any CPU {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Debug|x64.ActiveCfg = Debug|Any CPU + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Debug|x64.Build.0 = Debug|Any CPU + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Debug|x86.ActiveCfg = Debug|Any CPU + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Debug|x86.Build.0 = Debug|Any CPU {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Release|Any CPU.ActiveCfg = Release|Any CPU {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Release|Any CPU.Build.0 = Release|Any CPU + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Release|x64.ActiveCfg = Release|Any CPU + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Release|x64.Build.0 = Release|Any CPU + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Release|x86.ActiveCfg = Release|Any CPU + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738}.Release|x86.Build.0 = Release|Any CPU {AD923016-F318-49B7-B08B-89DED6DC2422}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD923016-F318-49B7-B08B-89DED6DC2422}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AD923016-F318-49B7-B08B-89DED6DC2422}.Debug|x64.ActiveCfg = Debug|Any CPU + {AD923016-F318-49B7-B08B-89DED6DC2422}.Debug|x64.Build.0 = Debug|Any CPU + {AD923016-F318-49B7-B08B-89DED6DC2422}.Debug|x86.ActiveCfg = Debug|Any CPU + {AD923016-F318-49B7-B08B-89DED6DC2422}.Debug|x86.Build.0 = Debug|Any CPU {AD923016-F318-49B7-B08B-89DED6DC2422}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD923016-F318-49B7-B08B-89DED6DC2422}.Release|Any CPU.Build.0 = Release|Any CPU + {AD923016-F318-49B7-B08B-89DED6DC2422}.Release|x64.ActiveCfg = Release|Any CPU + {AD923016-F318-49B7-B08B-89DED6DC2422}.Release|x64.Build.0 = Release|Any CPU + {AD923016-F318-49B7-B08B-89DED6DC2422}.Release|x86.ActiveCfg = Release|Any CPU + {AD923016-F318-49B7-B08B-89DED6DC2422}.Release|x86.Build.0 = Release|Any CPU {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Debug|x64.ActiveCfg = Debug|Any CPU + {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Debug|x64.Build.0 = Debug|Any CPU + {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Debug|x86.ActiveCfg = Debug|Any CPU + {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Debug|x86.Build.0 = Debug|Any CPU {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Release|Any CPU.Build.0 = Release|Any CPU + {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Release|x64.ActiveCfg = Release|Any CPU + {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Release|x64.Build.0 = Release|Any CPU + {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Release|x86.ActiveCfg = Release|Any CPU + {B9B92246-02EB-4118-9C6F-85A0D726AA70}.Release|x86.Build.0 = Release|Any CPU {B9022390-8184-4548-9DB1-50EB8878D20A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B9022390-8184-4548-9DB1-50EB8878D20A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9022390-8184-4548-9DB1-50EB8878D20A}.Debug|x64.ActiveCfg = Debug|Any CPU + {B9022390-8184-4548-9DB1-50EB8878D20A}.Debug|x64.Build.0 = Debug|Any CPU + {B9022390-8184-4548-9DB1-50EB8878D20A}.Debug|x86.ActiveCfg = Debug|Any CPU + {B9022390-8184-4548-9DB1-50EB8878D20A}.Debug|x86.Build.0 = Debug|Any CPU {B9022390-8184-4548-9DB1-50EB8878D20A}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9022390-8184-4548-9DB1-50EB8878D20A}.Release|Any CPU.Build.0 = Release|Any CPU + {B9022390-8184-4548-9DB1-50EB8878D20A}.Release|x64.ActiveCfg = Release|Any CPU + {B9022390-8184-4548-9DB1-50EB8878D20A}.Release|x64.Build.0 = Release|Any CPU + {B9022390-8184-4548-9DB1-50EB8878D20A}.Release|x86.ActiveCfg = Release|Any CPU + {B9022390-8184-4548-9DB1-50EB8878D20A}.Release|x86.Build.0 = Release|Any CPU {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Debug|x64.ActiveCfg = Debug|Any CPU + {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Debug|x64.Build.0 = Debug|Any CPU + {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Debug|x86.ActiveCfg = Debug|Any CPU + {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Debug|x86.Build.0 = Debug|Any CPU {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|Any CPU.ActiveCfg = Release|Any CPU {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|Any CPU.Build.0 = Release|Any CPU + {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|x64.ActiveCfg = Release|Any CPU + {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|x64.Build.0 = Release|Any CPU + {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|x86.ActiveCfg = Release|Any CPU + {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|x86.Build.0 = Release|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|x64.ActiveCfg = Debug|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|x64.Build.0 = Debug|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|x86.ActiveCfg = Debug|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|x86.Build.0 = Debug|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|Any CPU.Build.0 = Release|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|x64.ActiveCfg = Release|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|x64.Build.0 = Release|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|x86.ActiveCfg = Release|Any CPU + {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|x86.Build.0 = Release|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|x64.Build.0 = Debug|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|x86.ActiveCfg = Debug|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|x86.Build.0 = Debug|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|Any CPU.Build.0 = Release|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|x64.ActiveCfg = Release|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|x64.Build.0 = Release|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|x86.ActiveCfg = Release|Any CPU + {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|x86.Build.0 = Release|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|x64.ActiveCfg = Debug|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|x64.Build.0 = Debug|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|x86.ActiveCfg = Debug|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|x86.Build.0 = Debug|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|Any CPU.Build.0 = Release|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|x64.ActiveCfg = Release|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|x64.Build.0 = Release|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|x86.ActiveCfg = Release|Any CPU + {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} = {70CFC05F-CF79-4A7F-81EC-B32F1E564480} + {6E22BB20-901E-49B3-90A1-B0E6377FE568} = {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} + {7DBBBA73-6D84-4EBA-8711-EBC2939B04B5} = {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} + {5CB72FDE-BA77-47D1-A556-FEB15AAD4523} = {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} + {0E0EDD4C-1E45-4E03-BC08-0102C98D34B3} = {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} + {9014CA66-5217-49F6-8C1E-3430FD08EF61} = {6E22BB20-901E-49B3-90A1-B0E6377FE568} + {561DFD5E-5896-40D1-9708-4D692F5BAE66} = {6E22BB20-901E-49B3-90A1-B0E6377FE568} + {B325271C-85E7-4DB3-8BBB-B70F242954F8} = {7DBBBA73-6D84-4EBA-8711-EBC2939B04B5} + {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738} = {7DBBBA73-6D84-4EBA-8711-EBC2939B04B5} + {AD923016-F318-49B7-B08B-89DED6DC2422} = {5CB72FDE-BA77-47D1-A556-FEB15AAD4523} + {B9B92246-02EB-4118-9C6F-85A0D726AA70} = {5CB72FDE-BA77-47D1-A556-FEB15AAD4523} + {B9022390-8184-4548-9DB1-50EB8878D20A} = {0E0EDD4C-1E45-4E03-BC08-0102C98D34B3} + {1743BF7C-E6AE-4A06-BAD9-166D62894303} = {0E0EDD4C-1E45-4E03-BC08-0102C98D34B3} + {1C635F9F-56C2-E55F-1582-090CF138E5B8} = {A288BEE0-695A-BEEA-455C-649571D89326} + {4A7CC044-B73D-4600-82FD-B2C017543CE8} = {1C635F9F-56C2-E55F-1582-090CF138E5B8} + {7F24B1B8-95AA-4E18-998E-01CF73D33377} = {1C635F9F-56C2-E55F-1582-090CF138E5B8} + {29193C83-54F5-449F-85A5-77A0952A4E6A} = {1C635F9F-56C2-E55F-1582-090CF138E5B8} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {671B0BEC-2403-45B0-9357-2C97CC517668} EndGlobalSection @@ -290,19 +631,4 @@ Global $2.inheritsScope = text/x-csharp $2.scope = text/x-csharp EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} = {70CFC05F-CF79-4A7F-81EC-B32F1E564480} - {6E22BB20-901E-49B3-90A1-B0E6377FE568} = {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} - {9014CA66-5217-49F6-8C1E-3430FD08EF61} = {6E22BB20-901E-49B3-90A1-B0E6377FE568} - {561DFD5E-5896-40D1-9708-4D692F5BAE66} = {6E22BB20-901E-49B3-90A1-B0E6377FE568} - {7DBBBA73-6D84-4EBA-8711-EBC2939B04B5} = {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} - {B325271C-85E7-4DB3-8BBB-B70F242954F8} = {7DBBBA73-6D84-4EBA-8711-EBC2939B04B5} - {4C834F7F-07CA-46C7-8C7B-F10A1B3BC738} = {7DBBBA73-6D84-4EBA-8711-EBC2939B04B5} - {5CB72FDE-BA77-47D1-A556-FEB15AAD4523} = {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} - {0E0EDD4C-1E45-4E03-BC08-0102C98D34B3} = {CA1DD4A8-FA22-48E0-860F-D57A7ED7D426} - {AD923016-F318-49B7-B08B-89DED6DC2422} = {5CB72FDE-BA77-47D1-A556-FEB15AAD4523} - {B9B92246-02EB-4118-9C6F-85A0D726AA70} = {5CB72FDE-BA77-47D1-A556-FEB15AAD4523} - {B9022390-8184-4548-9DB1-50EB8878D20A} = {0E0EDD4C-1E45-4E03-BC08-0102C98D34B3} - {1743BF7C-E6AE-4A06-BAD9-166D62894303} = {0E0EDD4C-1E45-4E03-BC08-0102C98D34B3} - EndGlobalSection EndGlobal diff --git a/osu_game_patch.txt b/osu_game_patch.txt new file mode 100644 index 000000000000..ef1e044dfd12 --- /dev/null +++ b/osu_game_patch.txt @@ -0,0 +1,11 @@ +<<<<<<< SEARCH + public virtual bool IsDeployedBuild => false; + + public virtual IReadOnlyList InitialMods => Array.Empty(); +======= + public virtual bool IsDeployedBuild => false; + + public virtual bool IsVulkanRecommended => false; + + public virtual IReadOnlyList InitialMods => Array.Empty(); +>>>>>>> REPLACE diff --git a/renderer_settings_patch.txt b/renderer_settings_patch.txt new file mode 100644 index 000000000000..7012eeeb4fee --- /dev/null +++ b/renderer_settings_patch.txt @@ -0,0 +1,22 @@ +<<<<<<< SEARCH + new SettingsItemV2(new RendererDropdown + { + Caption = GraphicsSettingsStrings.Renderer, + Current = renderer, + Items = host.GetPreferredRenderersForCurrentPlatform().Order() +#pragma warning disable CS0612, CS0618 + .Where(t => t != RendererType.OpenGLLegacy), +#pragma warning restore CS0612, CS0618 + }) +======= + new SettingsItemV2(new RendererDropdown + { + Caption = GraphicsSettingsStrings.Renderer, + Current = renderer, + Items = host.GetPreferredRenderersForCurrentPlatform().Order() +#pragma warning disable CS0612, CS0618 + .Where(t => t != RendererType.OpenGLLegacy) +#pragma warning restore CS0612, CS0618 + .Where(t => t != RendererType.Vulkan || (game?.IsVulkanRecommended ?? false)), + }) +>>>>>>> REPLACE From c35d338b0693f4a42fd5e050115c79305e8c3263 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 00:30:27 +0000 Subject: [PATCH 2/9] Fix Vulkan and Oboe support on Android with local framework submodule --- .gitmodules | 3 +++ oboe_patch.txt | 25 ------------------------- osu.Desktop.slnf | 4 +++- osu_game_patch.txt | 11 ----------- renderer_settings_patch.txt | 22 ---------------------- 5 files changed, 6 insertions(+), 59 deletions(-) create mode 100644 .gitmodules delete mode 100644 oboe_patch.txt delete mode 100644 osu_game_patch.txt delete mode 100644 renderer_settings_patch.txt diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000000..8e225b574043 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "external/osu-framework"] + path = external/osu-framework + url = https://github.com/winnerspiros/osu-framework diff --git a/oboe_patch.txt b/oboe_patch.txt deleted file mode 100644 index 6061ed24951c..000000000000 --- a/oboe_patch.txt +++ /dev/null @@ -1,25 +0,0 @@ -<<<<<<< SEARCH - addRootMixer(audioManager.TrackMixer); - addRootMixer(audioManager.SampleMixer); - - if (mixerHandles.Count == 0) - { - addMixer(audioManager.TrackMixer); - addMixer(audioManager.SampleMixer); - } -======= - addRootMixer(audioManager.TrackMixer); - addRootMixer(audioManager.SampleMixer); - - foreach (var mixer in audioManager.ActiveMixers) - addRootMixer(mixer); - - if (mixerHandles.Count == 0) - { - addMixer(audioManager.TrackMixer); - addMixer(audioManager.SampleMixer); - - foreach (var mixer in audioManager.ActiveMixers) - addMixer(mixer); - } ->>>>>>> REPLACE diff --git a/osu.Desktop.slnf b/osu.Desktop.slnf index 606988ccdfde..5a5af2dc89f5 100644 --- a/osu.Desktop.slnf +++ b/osu.Desktop.slnf @@ -2,6 +2,8 @@ "solution": { "path": "osu.sln", "projects": [ + "external\\osu-framework\\osu.Framework.NativeLibs\\osu.Framework.NativeLibs.csproj", + "external\\osu-framework\\osu.Framework\\osu.Framework.csproj", "osu.Desktop\\osu.Desktop.csproj", "osu.Game.Benchmarks\\osu.Game.Benchmarks.csproj", "osu.Game.Rulesets.Catch.Tests\\osu.Game.Rulesets.Catch.Tests.csproj", @@ -26,4 +28,4 @@ "Templates\\Rulesets\\ruleset-scrolling-example\\osu.Game.Rulesets.Pippidon\\osu.Game.Rulesets.Pippidon.csproj" ] } -} \ No newline at end of file +} diff --git a/osu_game_patch.txt b/osu_game_patch.txt deleted file mode 100644 index ef1e044dfd12..000000000000 --- a/osu_game_patch.txt +++ /dev/null @@ -1,11 +0,0 @@ -<<<<<<< SEARCH - public virtual bool IsDeployedBuild => false; - - public virtual IReadOnlyList InitialMods => Array.Empty(); -======= - public virtual bool IsDeployedBuild => false; - - public virtual bool IsVulkanRecommended => false; - - public virtual IReadOnlyList InitialMods => Array.Empty(); ->>>>>>> REPLACE diff --git a/renderer_settings_patch.txt b/renderer_settings_patch.txt deleted file mode 100644 index 7012eeeb4fee..000000000000 --- a/renderer_settings_patch.txt +++ /dev/null @@ -1,22 +0,0 @@ -<<<<<<< SEARCH - new SettingsItemV2(new RendererDropdown - { - Caption = GraphicsSettingsStrings.Renderer, - Current = renderer, - Items = host.GetPreferredRenderersForCurrentPlatform().Order() -#pragma warning disable CS0612, CS0618 - .Where(t => t != RendererType.OpenGLLegacy), -#pragma warning restore CS0612, CS0618 - }) -======= - new SettingsItemV2(new RendererDropdown - { - Caption = GraphicsSettingsStrings.Renderer, - Current = renderer, - Items = host.GetPreferredRenderersForCurrentPlatform().Order() -#pragma warning disable CS0612, CS0618 - .Where(t => t != RendererType.OpenGLLegacy) -#pragma warning restore CS0612, CS0618 - .Where(t => t != RendererType.Vulkan || (game?.IsVulkanRecommended ?? false)), - }) ->>>>>>> REPLACE From 6608146481bec6791d47426168140bb0300e37ba Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 00:35:53 +0000 Subject: [PATCH 3/9] Fix Vulkan and Oboe support on Android with recursive submodule checkout --- .github/workflows/ci.yml | 8 ++++++++ .github/workflows/release.yml | 2 ++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bc79b5aea398..ba95de2d79c4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,6 +15,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 + with: + submodules: recursive - name: Install .NET 10.0.x uses: actions/setup-dotnet@v5 @@ -77,6 +79,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 + with: + submodules: recursive - name: Install .NET 10.0.x uses: actions/setup-dotnet@v5 @@ -116,6 +120,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 + with: + submodules: recursive - name: Setup JDK 11 uses: actions/setup-java@v5 @@ -141,6 +147,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 + with: + submodules: recursive - name: Install .NET 10.0.x uses: actions/setup-dotnet@v5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f44107d6eb43..81c2e6ccc71d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 + with: + submodules: recursive - name: Setup JDK 17 uses: actions/setup-java@v5 From 65ec9e7853d4cd5169836b10ea019d9e3785a9a3 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 05:39:57 +0000 Subject: [PATCH 4/9] Fix Vulkan and Oboe support on Android with AudioManager patch From ab91694e0a739eeaddc14859f7352554f48098cc Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 07:14:14 +0000 Subject: [PATCH 5/9] Fix Vulkan and Oboe support on Android using surgical reflection-based fixes - Reverted local framework link to restore CI stability across all platforms. - Implemented manual injection of the Vulkan renderer option in RendererSettings on Android, conditioned on hardware recommendation. - Updated Oboe redirection logic to use reflection for accessing internal framework mixers, maintaining compatibility with official NuGet packages. - Added dynamic binding to mixer collection changes via reflection to ensure robust audio hijacking. - Fixed JNI global reference handling in OsuGameActivity for .NET 10. --- .gitmodules | 3 - external/osu-framework | 1 - osu.Android.props | 2 +- osu.Android.slnf | 3 - osu.Android/OboeAudioRedirector.cs | 27 ++++++-- osu.Android/OsuGameActivity.cs | 14 ++-- osu.Android/OsuGameAndroid.cs | 68 ++++++++++++------- osu.Desktop.slnf | 2 - .../Sections/Graphics/RendererSettings.cs | 20 ++++-- osu.Game/osu.Game.csproj | 2 +- osu.sln | 50 -------------- 11 files changed, 88 insertions(+), 104 deletions(-) delete mode 160000 external/osu-framework diff --git a/.gitmodules b/.gitmodules index 8e225b574043..e69de29bb2d1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "external/osu-framework"] - path = external/osu-framework - url = https://github.com/winnerspiros/osu-framework diff --git a/external/osu-framework b/external/osu-framework deleted file mode 160000 index 03d869d74a95..000000000000 --- a/external/osu-framework +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 03d869d74a95ef10944785078e9e6bae17b3e995 diff --git a/osu.Android.props b/osu.Android.props index a17389fad470..9ad425da8662 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -31,7 +31,7 @@ This is safe because .NET guarantees backward compatibility for loading net8.0 assemblies in a net10.0 runtime, and Android API changes between 34→36 are additive. TODO: Remove this comment once ppy.osu.Framework.Android ships net10.0-android assets. --> - + diff --git a/osu.sln b/osu.sln index 05ce0c3768b3..9184f95bfaeb 100644 --- a/osu.sln +++ b/osu.sln @@ -100,16 +100,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeAnalysis", "CodeAnalysi CodeAnalysis\osu.globalconfig = CodeAnalysis\osu.globalconfig EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "external", "external", "{A288BEE0-695A-BEEA-455C-649571D89326}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "osu-framework", "osu-framework", "{1C635F9F-56C2-E55F-1582-090CF138E5B8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework", "external\osu-framework\osu.Framework\osu.Framework.csproj", "{4A7CC044-B73D-4600-82FD-B2C017543CE8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework.NativeLibs", "external\osu-framework\osu.Framework.NativeLibs\osu.Framework.NativeLibs.csproj", "{7F24B1B8-95AA-4E18-998E-01CF73D33377}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework.Android", "external\osu-framework\osu.Framework.Android\osu.Framework.Android.csproj", "{29193C83-54F5-449F-85A5-77A0952A4E6A}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -540,42 +530,6 @@ Global {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|x64.Build.0 = Release|Any CPU {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|x86.ActiveCfg = Release|Any CPU {1743BF7C-E6AE-4A06-BAD9-166D62894303}.Release|x86.Build.0 = Release|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|x64.ActiveCfg = Debug|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|x64.Build.0 = Debug|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|x86.ActiveCfg = Debug|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Debug|x86.Build.0 = Debug|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|Any CPU.Build.0 = Release|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|x64.ActiveCfg = Release|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|x64.Build.0 = Release|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|x86.ActiveCfg = Release|Any CPU - {4A7CC044-B73D-4600-82FD-B2C017543CE8}.Release|x86.Build.0 = Release|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|x64.ActiveCfg = Debug|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|x64.Build.0 = Debug|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|x86.ActiveCfg = Debug|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Debug|x86.Build.0 = Debug|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|Any CPU.Build.0 = Release|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|x64.ActiveCfg = Release|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|x64.Build.0 = Release|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|x86.ActiveCfg = Release|Any CPU - {7F24B1B8-95AA-4E18-998E-01CF73D33377}.Release|x86.Build.0 = Release|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|x64.ActiveCfg = Debug|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|x64.Build.0 = Debug|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|x86.ActiveCfg = Debug|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Debug|x86.Build.0 = Debug|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|Any CPU.Build.0 = Release|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|x64.ActiveCfg = Release|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|x64.Build.0 = Release|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|x86.ActiveCfg = Release|Any CPU - {29193C83-54F5-449F-85A5-77A0952A4E6A}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -594,10 +548,6 @@ Global {B9B92246-02EB-4118-9C6F-85A0D726AA70} = {5CB72FDE-BA77-47D1-A556-FEB15AAD4523} {B9022390-8184-4548-9DB1-50EB8878D20A} = {0E0EDD4C-1E45-4E03-BC08-0102C98D34B3} {1743BF7C-E6AE-4A06-BAD9-166D62894303} = {0E0EDD4C-1E45-4E03-BC08-0102C98D34B3} - {1C635F9F-56C2-E55F-1582-090CF138E5B8} = {A288BEE0-695A-BEEA-455C-649571D89326} - {4A7CC044-B73D-4600-82FD-B2C017543CE8} = {1C635F9F-56C2-E55F-1582-090CF138E5B8} - {7F24B1B8-95AA-4E18-998E-01CF73D33377} = {1C635F9F-56C2-E55F-1582-090CF138E5B8} - {29193C83-54F5-449F-85A5-77A0952A4E6A} = {1C635F9F-56C2-E55F-1582-090CF138E5B8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {671B0BEC-2403-45B0-9357-2C97CC517668} From 7aafd254835d94e8009d8e679912e24b151419a2 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 13:03:31 +0000 Subject: [PATCH 6/9] Fix Oboe and Vulkan support on Android via reflection --- osu.Android/AndroidNativeBridgeManager.cs | 2 ++ osu.Android/OsuGameActivity.cs | 6 ++--- osu.Android/OsuGameAndroid.cs | 24 +++++++++++++++++-- osu.Game/OsuGameBase.cs | 2 ++ .../Sections/Graphics/RendererSettings.cs | 5 +++- 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/osu.Android/AndroidNativeBridgeManager.cs b/osu.Android/AndroidNativeBridgeManager.cs index 4ce4f4b79884..8825851b4f7c 100644 --- a/osu.Android/AndroidNativeBridgeManager.cs +++ b/osu.Android/AndroidNativeBridgeManager.cs @@ -117,6 +117,8 @@ public void StartVulkanProbe() [MethodImpl(MethodImplOptions.NoInlining)] public bool IsVulkanRecommended() => (vulkanProbe as VulkanProbe)?.IsRecommended ?? false; + + public bool IsVulkanAvailable() => (vulkanProbe as VulkanProbe)?.IsAvailable ?? false; public void StopVulkanProbe() { (vulkanProbe as VulkanProbe)?.Dispose(); diff --git a/osu.Android/OsuGameActivity.cs b/osu.Android/OsuGameActivity.cs index 5be35e5e06bc..d9ca6060c626 100644 --- a/osu.Android/OsuGameActivity.cs +++ b/osu.Android/OsuGameActivity.cs @@ -180,10 +180,10 @@ public IntPtr GetSurfaceGlobalRef() public void SurfaceCreated(ISurfaceHolder holder) { var surface = holder.Surface; - if (surface != null) + if (surface != null && surface.IsValid) { - var handle = surface.Handle; - if (handle != IntPtr.Zero) + IntPtr handle = surface.Handle; + if (handle == IntPtr.Zero) return; { surfaceGlobalRef = global::Android.Runtime.JNIEnv.NewGlobalRef(handle); surfaceEvent.Set(); diff --git a/osu.Android/OsuGameAndroid.cs b/osu.Android/OsuGameAndroid.cs index eed086d5a724..f27c2ae0373c 100644 --- a/osu.Android/OsuGameAndroid.cs +++ b/osu.Android/OsuGameAndroid.cs @@ -1,3 +1,4 @@ +using System.Collections.Specialized; using System; using System.Collections; using System.Collections.Generic; @@ -73,6 +74,8 @@ public partial class OsuGameAndroid : OsuGame private readonly IHighPerformanceSessionManager highPerformanceSessionManager = new AndroidHighPerformanceSessionManager(); private OboeAudioRedirector? audioRedirector; + private Delegate? activeMixersHandler; + private object? activeMixersList; private IntPtr updateAdpfSession; private IntPtr renderAdpfSession; @@ -140,14 +143,15 @@ private void load() FieldInfo? field = typeof(AudioManager).GetField("activeMixers", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null) { + activeMixersList = field.GetValue(Audio); object? val = field.GetValue(Audio); if (val != null) { MethodInfo? bindMethod = val.GetType().GetMethod("BindCollectionChanged", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (bindMethod != null) { - Action callback = (_, _) => { if (lowLatencyAudio.Value) audioRedirector?.RefreshMixers(0); }; - bindMethod.Invoke(val, new object[] { callback, true }); + var del = Delegate.CreateDelegate(bindMethod.GetParameters()[0].ParameterType, this, typeof(OsuGameAndroid).GetMethod(nameof(onActiveMixersChanged), BindingFlags.Instance | BindingFlags.NonPublic)!); + bindMethod.Invoke(val, new object[] { del, true }); } } } @@ -381,6 +385,10 @@ private void selectHighestRefreshRate() public override bool IsVulkanRecommended => (nativeBridges as AndroidNativeBridgeManager)?.IsVulkanRecommended() ?? false; + public override bool IsVulkanSupported => (nativeBridges as AndroidNativeBridgeManager)?.IsVulkanAvailable() ?? false; + + private void onActiveMixersChanged(object? sender, NotifyCollectionChangedEventArgs args) => Schedule(() => { if (lowLatencyAudio.Value) audioRedirector?.RefreshMixers(0); }); + public double GetMeasuredAudioLatencyMs() => getMeasuredAudioLatencyFromBridge(); [MethodImpl(MethodImplOptions.NoInlining)] @@ -504,6 +512,18 @@ protected override void Dispose(bool isDisposing) audioRedirector?.Dispose(); audioRedirector = null; + if (activeMixersList != null && activeMixersHandler != null) + { + try + { + MethodInfo? unbindMethod = activeMixersList.GetType().GetMethod("UnbindCollectionChanged", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + unbindMethod?.Invoke(activeMixersList, new object[] { activeMixersHandler }); + } + catch { } + activeMixersList = null; + activeMixersHandler = null; + } + if (nativeBridges != null) disposeNativeBridges(); diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 039e50db5ce6..4108a4b5b43e 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -120,6 +120,8 @@ public virtual EndpointConfiguration CreateEndpoints() => public bool IsDeployedBuild => AssemblyVersion.Major > 0; public virtual bool IsVulkanRecommended => false; + public virtual bool IsVulkanSupported => false; + public virtual string Version { get diff --git a/osu.Game/Overlays/Settings/Sections/Graphics/RendererSettings.cs b/osu.Game/Overlays/Settings/Sections/Graphics/RendererSettings.cs index cdd1261e1d2c..3775871fee6b 100644 --- a/osu.Game/Overlays/Settings/Sections/Graphics/RendererSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Graphics/RendererSettings.cs @@ -30,12 +30,15 @@ private void load(FrameworkConfigManager config, OsuConfigManager osuConfig, IDi // Surgically inject Vulkan on Android if recommended, even if the host doesn't report it. // This allows us to use official framework NuGet while still supporting Vulkan in the game. - if (RuntimeInfo.OS == RuntimeInfo.Platform.Android && (game?.IsVulkanRecommended ?? false)) + if (RuntimeInfo.OS == RuntimeInfo.Platform.Android && (game?.IsVulkanSupported ?? false)) { if (!rendererItems.Contains(RendererType.Vulkan)) rendererItems.Add(RendererType.Vulkan); } + if (!rendererItems.Contains(renderer.Value)) + renderer.SetDefault(); + Children = new Drawable[] { new SettingsItemV2(new RendererDropdown From 0aaf515b65f1f5e62cfd31349ff3f8ae7ff55379 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 13:33:02 +0000 Subject: [PATCH 7/9] Fix Oboe and Vulkan support on Android via reflection and fix CI errors --- osu.Android/OboeAudioRedirector.cs | 3 +++ osu.Android/OsuGameActivity.cs | 3 +++ osu.Android/OsuGameAndroid.cs | 8 +++++++- .../Settings/Sections/Graphics/RendererSettings.cs | 10 +++++++--- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/osu.Android/OboeAudioRedirector.cs b/osu.Android/OboeAudioRedirector.cs index 633b005cdbfe..e75bd76344b4 100644 --- a/osu.Android/OboeAudioRedirector.cs +++ b/osu.Android/OboeAudioRedirector.cs @@ -1,3 +1,6 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + using System; using System.Collections; using System.Collections.Generic; diff --git a/osu.Android/OsuGameActivity.cs b/osu.Android/OsuGameActivity.cs index d9ca6060c626..8ecbfb2267c0 100644 --- a/osu.Android/OsuGameActivity.cs +++ b/osu.Android/OsuGameActivity.cs @@ -1,3 +1,6 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + using Android.App; using Android.Content.PM; using Android.Content; diff --git a/osu.Android/OsuGameAndroid.cs b/osu.Android/OsuGameAndroid.cs index f27c2ae0373c..b4edc601bd2d 100644 --- a/osu.Android/OsuGameAndroid.cs +++ b/osu.Android/OsuGameAndroid.cs @@ -1,3 +1,9 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using Android.Content.PM; +using osu.Game.Performance; +using osu.Game.Updater; using System.Collections.Specialized; using System; using System.Collections; @@ -565,4 +571,4 @@ internal class AndroidBatteryInfo : BatteryInfo public override double? ChargeLevel => Microsoft.Maui.Devices.Battery.ChargeLevel; public override bool OnBattery => Microsoft.Maui.Devices.Battery.PowerSource == BatteryPowerSource.Battery; } -} +} \ No newline at end of file diff --git a/osu.Game/Overlays/Settings/Sections/Graphics/RendererSettings.cs b/osu.Game/Overlays/Settings/Sections/Graphics/RendererSettings.cs index 3775871fee6b..d34b768b0ef3 100644 --- a/osu.Game/Overlays/Settings/Sections/Graphics/RendererSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Graphics/RendererSettings.cs @@ -1,17 +1,21 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + using System.Linq; -using System.Collections.Generic; using osu.Framework.Allocation; -using osu.Framework; using osu.Framework.Configuration; using osu.Framework.Extensions; using osu.Framework.Graphics; using osu.Framework.Localisation; using osu.Framework.Platform; +using osu.Framework; using osu.Game.Configuration; using osu.Game.Graphics.UserInterfaceV2; using osu.Game.Localisation; using osu.Game.Overlays.Dialog; + + namespace osu.Game.Overlays.Settings.Sections.Graphics { public partial class RendererSettings : SettingsSubsection @@ -122,4 +126,4 @@ protected override LocalisableString GenerateItemText(RendererType item) } } } -} +} \ No newline at end of file From 4df58dd17d3901c159d11653d761d932b95f71f1 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 15:08:42 +0000 Subject: [PATCH 8/9] Fix Oboe and Vulkan support on Android and resolve CI ambiguity errors --- osu.Android/OsuGameAndroid.cs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/osu.Android/OsuGameAndroid.cs b/osu.Android/OsuGameAndroid.cs index b4edc601bd2d..c1fa71d8ef6a 100644 --- a/osu.Android/OsuGameAndroid.cs +++ b/osu.Android/OsuGameAndroid.cs @@ -1,5 +1,8 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using Microsoft.Maui.Devices; +using osu.Android.Performance; +using osu.Framework.Development; using Android.Content.PM; using osu.Game.Performance; @@ -8,17 +11,17 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Diagnostics; +using Debug = System.Diagnostics.Debug; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; -using Android.Content; +using Context = global::Android.Content.Context; using Android.Media; using Android.OS; using Android.Views; using osu.Android.Native; using osu.Framework.Allocation; -using osu.Framework.Audio; +using AudioManager = osu.Framework.Audio.AudioManager; using osu.Framework.Bindables; using osu.Framework.Configuration; using osu.Framework.Extensions.IEnumerableExtensions; @@ -107,7 +110,7 @@ public override string Version get { if (!IsDeployedBuild) - return @"local " + (DebugUtils.IsDebugBuild ? @"debug" : @"release"); + return @"local " + (osu.Framework.Development.DebugUtils.IsDebugBuild ? @"debug" : @"release"); return getPackageInfo()?.VersionName ?? @"unknown"; } @@ -244,9 +247,9 @@ protected override void LoadComplete() int hardwareSampleRate = 0; try { - if (gameActivity.GetSystemService(Context.AudioService) is AudioManager audioManager) + if (gameActivity.GetSystemService(global::Android.Content.Context.AudioService) is global::Android.Media.AudioManager audioManager) { - string? rateStr = audioManager.GetProperty(AudioManager.PropertyOutputSampleRate); + string? rateStr = audioManager.GetProperty(global::Android.Media.AudioManager.PropertyOutputSampleRate); if (!string.IsNullOrEmpty(rateStr)) hardwareSampleRate = int.Parse(rateStr); @@ -404,9 +407,9 @@ private void startOboeBridge(Action onLatencyMeasured, IntPtr provider, try { - if (gameActivity.GetSystemService(Context.AudioService) is AudioManager audioManager) + if (gameActivity.GetSystemService(global::Android.Content.Context.AudioService) is global::Android.Media.AudioManager audioManager) { - string? rateStr = audioManager.GetProperty(AudioManager.PropertyOutputSampleRate); + string? rateStr = audioManager.GetProperty(global::Android.Media.AudioManager.PropertyOutputSampleRate); if (!string.IsNullOrEmpty(rateStr)) hardwareSampleRate = int.Parse(rateStr); @@ -476,11 +479,11 @@ private void updateOrientation() switch (orientation) { case MobileUtils.Orientation.Locked: - gameActivity.RequestedOrientation = Android.Content.PM.ScreenOrientation.Locked; + gameActivity.RequestedOrientation = global::Android.Content.PM.ScreenOrientation.Locked; break; case MobileUtils.Orientation.Portrait: - gameActivity.RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait; + gameActivity.RequestedOrientation = global::Android.Content.PM.ScreenOrientation.Portrait; break; case MobileUtils.Orientation.Default: @@ -569,6 +572,6 @@ protected override void UpdateAfterChildren() internal class AndroidBatteryInfo : BatteryInfo { public override double? ChargeLevel => Microsoft.Maui.Devices.Battery.ChargeLevel; - public override bool OnBattery => Microsoft.Maui.Devices.Battery.PowerSource == BatteryPowerSource.Battery; + public override bool OnBattery => Microsoft.Maui.Devices.Battery.PowerSource == global::Microsoft.Maui.Devices.BatteryPowerSource.Battery; } } \ No newline at end of file From 1ec528c6ba8e45467d16fb6a1a2092b8a2ed5873 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 15:59:14 +0000 Subject: [PATCH 9/9] Fix Oboe and Vulkan support on Android and finalize CI fixes --- osu.Android/OsuGameAndroid.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Android/OsuGameAndroid.cs b/osu.Android/OsuGameAndroid.cs index c1fa71d8ef6a..149f8250329f 100644 --- a/osu.Android/OsuGameAndroid.cs +++ b/osu.Android/OsuGameAndroid.cs @@ -1,5 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System.Diagnostics; using Microsoft.Maui.Devices; using osu.Android.Performance; using osu.Framework.Development;