mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 19:22:54 +08:00
Add support for loading shaders from ruleset resources
This commit is contained in:
parent
b6e07ff59c
commit
67f0344c0c
@ -10,6 +10,7 @@ using osu.Framework.Audio;
|
|||||||
using osu.Framework.Audio.Sample;
|
using osu.Framework.Audio.Sample;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics.OpenGL.Textures;
|
using osu.Framework.Graphics.OpenGL.Textures;
|
||||||
|
using osu.Framework.Graphics.Shaders;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Framework.IO.Stores;
|
using osu.Framework.IO.Stores;
|
||||||
using osu.Framework.Platform;
|
using osu.Framework.Platform;
|
||||||
@ -34,6 +35,11 @@ namespace osu.Game.Rulesets.UI
|
|||||||
/// </remarks>
|
/// </remarks>
|
||||||
public ISampleStore SampleStore { get; }
|
public ISampleStore SampleStore { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The shader manager to be used for the ruleset.
|
||||||
|
/// </summary>
|
||||||
|
public ShaderManager ShaderManager { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The ruleset config manager.
|
/// The ruleset config manager.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -52,6 +58,9 @@ namespace osu.Game.Rulesets.UI
|
|||||||
SampleStore = parent.Get<AudioManager>().GetSampleStore(new NamespacedResourceStore<byte[]>(resources, @"Samples"));
|
SampleStore = parent.Get<AudioManager>().GetSampleStore(new NamespacedResourceStore<byte[]>(resources, @"Samples"));
|
||||||
SampleStore.PlaybackConcurrency = OsuGameBase.SAMPLE_CONCURRENCY;
|
SampleStore.PlaybackConcurrency = OsuGameBase.SAMPLE_CONCURRENCY;
|
||||||
CacheAs(SampleStore = new FallbackSampleStore(SampleStore, parent.Get<ISampleStore>()));
|
CacheAs(SampleStore = new FallbackSampleStore(SampleStore, parent.Get<ISampleStore>()));
|
||||||
|
|
||||||
|
ShaderManager = new ShaderManager(new NamespacedResourceStore<byte[]>(resources, @"Shaders"));
|
||||||
|
CacheAs(ShaderManager = new FallbackShaderManager(ShaderManager, parent.Get<ShaderManager>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
RulesetConfigManager = parent.Get<RulesetConfigCache>().GetConfigFor(ruleset);
|
RulesetConfigManager = parent.Get<RulesetConfigCache>().GetConfigFor(ruleset);
|
||||||
@ -84,6 +93,7 @@ namespace osu.Game.Rulesets.UI
|
|||||||
|
|
||||||
SampleStore?.Dispose();
|
SampleStore?.Dispose();
|
||||||
TextureStore?.Dispose();
|
TextureStore?.Dispose();
|
||||||
|
ShaderManager?.Dispose();
|
||||||
RulesetConfigManager = null;
|
RulesetConfigManager = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,5 +182,25 @@ namespace osu.Game.Rulesets.UI
|
|||||||
primary?.Dispose();
|
primary?.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class FallbackShaderManager : ShaderManager
|
||||||
|
{
|
||||||
|
private readonly ShaderManager primary;
|
||||||
|
private readonly ShaderManager fallback;
|
||||||
|
|
||||||
|
public FallbackShaderManager(ShaderManager primary, ShaderManager fallback)
|
||||||
|
{
|
||||||
|
this.primary = primary;
|
||||||
|
this.fallback = fallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override byte[] LoadRaw(string name) => primary.LoadRaw(name) ?? fallback.LoadRaw(name);
|
||||||
|
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
base.Dispose(disposing);
|
||||||
|
primary?.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user