1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-13 07:43:00 +08:00

Allow disabling high resolution texture lookups in LegacySkin

This commit is contained in:
Salman Ahmed 2024-01-17 11:21:44 +03:00
parent da29faffd0
commit 5ad2918a75
2 changed files with 40 additions and 7 deletions

View File

@ -127,8 +127,29 @@ namespace osu.Game.Tests.NonVisual.Skinning
Assert.IsNull(texture);
}
[Test]
public void TestDisallowHighResolutionSprites()
{
var textureStore = new TestTextureStore("hitcircle", "hitcircle@2x");
var legacySkin = new TestLegacySkin(textureStore) { HighResolutionSprites = false };
var texture = legacySkin.GetTexture("hitcircle");
Assert.IsNotNull(texture);
Assert.That(texture.ScaleAdjust, Is.EqualTo(1));
texture = legacySkin.GetTexture("hitcircle@2x");
Assert.IsNotNull(texture);
Assert.That(texture.ScaleAdjust, Is.EqualTo(1));
}
private class TestLegacySkin : LegacySkin
{
public bool HighResolutionSprites { get; set; } = true;
protected override bool AllowHighResolutionSprites => HighResolutionSprites;
public TestLegacySkin(IResourceStore<TextureUpload> textureStore)
: base(new SkinInfo(), new TestResourceProvider(textureStore), null, string.Empty)
{

View File

@ -477,6 +477,11 @@ namespace osu.Game.Skinning
return null;
}
/// <summary>
/// Whether high-resolution textures ("@2x"-suffixed) are allowed to be used by <see cref="GetTexture"/> when available.
/// </summary>
protected virtual bool AllowHighResolutionSprites => true;
public override Texture? GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT)
{
switch (componentName)
@ -488,15 +493,22 @@ namespace osu.Game.Skinning
foreach (string name in getFallbackNames(componentName))
{
// some component names (especially user-controlled ones, like `HitX` in mania)
// may contain `@2x` scale specifications.
// stable happens to check for that and strip them, so do the same to match stable behaviour.
string lookupName = name.Replace(@"@2x", string.Empty);
string lookupName = name;
Texture? texture = null;
float ratio = 1;
float ratio = 2;
string twoTimesFilename = $"{Path.ChangeExtension(lookupName, null)}@2x{Path.GetExtension(lookupName)}";
if (AllowHighResolutionSprites)
{
// some component names (especially user-controlled ones, like `HitX` in mania)
// may contain `@2x` scale specifications.
// stable happens to check for that and strip them, so do the same to match stable behaviour.
lookupName = name.Replace(@"@2x", string.Empty);
var texture = Textures?.Get(twoTimesFilename, wrapModeS, wrapModeT);
string twoTimesFilename = $"{Path.ChangeExtension(lookupName, null)}@2x{Path.GetExtension(lookupName)}";
texture = Textures?.Get(twoTimesFilename, wrapModeS, wrapModeT);
ratio = 2;
}
if (texture == null)
{