mirror of
https://github.com/ppy/osu.git
synced 2025-01-13 14:12:56 +08:00
Make Textures
and Samples
read-only
This commit is contained in:
parent
6542f974f2
commit
05c7e09d79
@ -1,12 +1,21 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Graphics.OpenGL.Textures;
|
using osu.Framework.Audio;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
|
using osu.Framework.IO.Stores;
|
||||||
|
using osu.Game.Database;
|
||||||
|
using osu.Game.IO;
|
||||||
using osu.Game.Skinning;
|
using osu.Game.Skinning;
|
||||||
|
using SixLabors.ImageSharp;
|
||||||
|
using SixLabors.ImageSharp.PixelFormats;
|
||||||
|
|
||||||
namespace osu.Game.Tests.NonVisual.Skinning
|
namespace osu.Game.Tests.NonVisual.Skinning
|
||||||
{
|
{
|
||||||
@ -71,7 +80,7 @@ namespace osu.Game.Tests.NonVisual.Skinning
|
|||||||
var texture = legacySkin.GetTexture(requestedComponent);
|
var texture = legacySkin.GetTexture(requestedComponent);
|
||||||
|
|
||||||
Assert.IsNotNull(texture);
|
Assert.IsNotNull(texture);
|
||||||
Assert.AreEqual(textureStore.Textures[expectedTexture], texture);
|
Assert.AreEqual(textureStore.Textures[expectedTexture].Width, texture.Width);
|
||||||
Assert.AreEqual(expectedScale, texture.ScaleAdjust);
|
Assert.AreEqual(expectedScale, texture.ScaleAdjust);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,23 +97,50 @@ namespace osu.Game.Tests.NonVisual.Skinning
|
|||||||
|
|
||||||
private class TestLegacySkin : LegacySkin
|
private class TestLegacySkin : LegacySkin
|
||||||
{
|
{
|
||||||
public TestLegacySkin(TextureStore textureStore)
|
public TestLegacySkin(IResourceStore<TextureUpload> textureStore)
|
||||||
: base(new SkinInfo(), null, null, string.Empty)
|
: base(new SkinInfo(), new TestResourceProvider(textureStore), null, string.Empty)
|
||||||
{
|
{
|
||||||
Textures = textureStore;
|
}
|
||||||
|
|
||||||
|
private class TestResourceProvider : IStorageResourceProvider
|
||||||
|
{
|
||||||
|
private readonly IResourceStore<TextureUpload> textureStore;
|
||||||
|
|
||||||
|
public TestResourceProvider(IResourceStore<TextureUpload> textureStore)
|
||||||
|
{
|
||||||
|
this.textureStore = textureStore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AudioManager AudioManager => null;
|
||||||
|
public IResourceStore<byte[]> Files => null;
|
||||||
|
public IResourceStore<byte[]> Resources => null;
|
||||||
|
public RealmAccess RealmAccess => null;
|
||||||
|
public IResourceStore<TextureUpload> CreateTextureLoaderStore(IResourceStore<byte[]> underlyingStore) => textureStore;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestTextureStore : TextureStore
|
private class TestTextureStore : IResourceStore<TextureUpload>
|
||||||
{
|
{
|
||||||
public readonly Dictionary<string, Texture> Textures;
|
public readonly Dictionary<string, TextureUpload> Textures;
|
||||||
|
|
||||||
public TestTextureStore(params string[] fileNames)
|
public TestTextureStore(params string[] fileNames)
|
||||||
{
|
{
|
||||||
Textures = fileNames.ToDictionary(fileName => fileName, fileName => new Texture(1, 1));
|
// use an incrementing width to allow assertion matching on correct textures as they turn from uploads into actual textures.
|
||||||
|
int width = 1;
|
||||||
|
Textures = fileNames.ToDictionary(fileName => fileName, fileName => new TextureUpload(new Image<Rgba32>(width, width++)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Texture Get(string name, WrapMode wrapModeS, WrapMode wrapModeT) => Textures.GetValueOrDefault(name);
|
public TextureUpload Get(string name) => Textures.GetValueOrDefault(name);
|
||||||
|
|
||||||
|
public Task<TextureUpload> GetAsync(string name, CancellationToken cancellationToken = new CancellationToken()) => Task.FromResult(Get(name));
|
||||||
|
|
||||||
|
public Stream GetStream(string name) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public IEnumerable<string> GetAvailableResources() => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,13 +28,13 @@ namespace osu.Game.Skinning
|
|||||||
/// A texture store which can be used to perform user file loops for this skin.
|
/// A texture store which can be used to perform user file loops for this skin.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[CanBeNull]
|
[CanBeNull]
|
||||||
protected TextureStore Textures { get; set; }
|
protected TextureStore Textures { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A sample store which can be used to perform user file loops for this skin.
|
/// A sample store which can be used to perform user file loops for this skin.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[CanBeNull]
|
[CanBeNull]
|
||||||
protected ISampleStore Samples { get; set; }
|
protected ISampleStore Samples { get; }
|
||||||
|
|
||||||
public readonly Live<SkinInfo> SkinInfo;
|
public readonly Live<SkinInfo> SkinInfo;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user