您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
81 行
2.8 KiB
81 行
2.8 KiB
#if UNITY_EDITOR
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using UnityEngine.TestTools.Graphics;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace UnityEditor.TestTools.Graphics
|
|
{
|
|
internal class EditorGraphicsTestCaseProvider : IGraphicsTestCaseProvider
|
|
{
|
|
string m_ReferenceImagePath = string.Empty;
|
|
|
|
public EditorGraphicsTestCaseProvider()
|
|
{
|
|
}
|
|
|
|
public EditorGraphicsTestCaseProvider(string referenceImagePath)
|
|
{
|
|
m_ReferenceImagePath = referenceImagePath;
|
|
}
|
|
|
|
public IEnumerable<GraphicsTestCase> GetTestCases()
|
|
{
|
|
var allImages = CollectReferenceImagePathsFor(string.IsNullOrEmpty(m_ReferenceImagePath) ? ReferenceImagesRoot : m_ReferenceImagePath, QualitySettings.activeColorSpace, Application.platform,
|
|
SystemInfo.graphicsDeviceType);
|
|
|
|
foreach (var scenePath in EditorBuildSettings.scenes.Where(s => s.enabled == true).Select(s => s.path).ToArray())
|
|
{
|
|
Texture2D referenceImage = null;
|
|
|
|
string imagePath;
|
|
if (allImages.TryGetValue(Path.GetFileNameWithoutExtension(scenePath), out imagePath))
|
|
{
|
|
referenceImage = AssetDatabase.LoadAssetAtPath<Texture2D>(imagePath);
|
|
}
|
|
|
|
yield return new GraphicsTestCase(scenePath, referenceImage);
|
|
}
|
|
}
|
|
|
|
public const string ReferenceImagesRoot = "Assets/ReferenceImages";
|
|
|
|
public static Dictionary<string, string> CollectReferenceImagePathsFor(string referenceImageRoot, ColorSpace colorSpace, RuntimePlatform runtimePlatform,
|
|
GraphicsDeviceType graphicsApi)
|
|
{
|
|
var result = new Dictionary<string, string>();
|
|
|
|
if (!Directory.Exists(referenceImageRoot))
|
|
return result;
|
|
|
|
var fullPathPrefix = string.Format("{0}/{1}/{2}/{3}/", referenceImageRoot, colorSpace, runtimePlatform, graphicsApi);
|
|
|
|
foreach (var assetPath in AssetDatabase.GetAllAssetPaths()
|
|
.Where(p => p.StartsWith(referenceImageRoot, StringComparison.OrdinalIgnoreCase))
|
|
.Where(p => fullPathPrefix.StartsWith(Path.GetDirectoryName(p)))
|
|
.OrderBy(p => p.Count(ch => ch == '/')))
|
|
{
|
|
// Skip directories
|
|
if (!File.Exists(assetPath))
|
|
continue;
|
|
|
|
var fileName = Path.GetFileNameWithoutExtension(assetPath);
|
|
if (fileName == null)
|
|
continue;
|
|
|
|
var texture = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);
|
|
if (!texture)
|
|
continue;
|
|
|
|
result[fileName] = assetPath;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
#endif
|