using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SpineViewer.Spine
{
///
/// 实现不同版本的 TextureLoader
///
public class TextureLoader :
SpineRuntime21.TextureLoader,
SpineRuntime36.TextureLoader,
SpineRuntime37.TextureLoader,
SpineRuntime38.TextureLoader,
SpineRuntime40.TextureLoader,
SpineRuntime41.TextureLoader,
SpineRuntime42.TextureLoader
{
///
/// 强制启用 Smooth
///
public bool ForceSmooth { get; set; } = false;
///
/// 强制启用 Repeated
///
public bool ForceRepeated { get; set; } = false;
///
/// 强制启用 Mipmap
///
public bool ForceMipmap { get; set; } = false;
public void Load(SpineRuntime21.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime21.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime21.TextureWrap.Repeat && page.vWrap == SpineRuntime21.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime21.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime21.TextureFilter.MipMap:
case SpineRuntime21.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime21.TextureFilter.MipMapLinearNearest:
case SpineRuntime21.TextureFilter.MipMapNearestLinear:
case SpineRuntime21.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime36.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime36.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime36.TextureWrap.Repeat && page.vWrap == SpineRuntime36.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime36.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime36.TextureFilter.MipMap:
case SpineRuntime36.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime36.TextureFilter.MipMapLinearNearest:
case SpineRuntime36.TextureFilter.MipMapNearestLinear:
case SpineRuntime36.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime37.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime37.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime37.TextureWrap.Repeat && page.vWrap == SpineRuntime37.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime37.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime37.TextureFilter.MipMap:
case SpineRuntime37.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime37.TextureFilter.MipMapLinearNearest:
case SpineRuntime37.TextureFilter.MipMapNearestLinear:
case SpineRuntime37.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime38.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime38.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime38.TextureWrap.Repeat && page.vWrap == SpineRuntime38.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime38.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime38.TextureFilter.MipMap:
case SpineRuntime38.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime38.TextureFilter.MipMapLinearNearest:
case SpineRuntime38.TextureFilter.MipMapNearestLinear:
case SpineRuntime38.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime40.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime40.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime40.TextureWrap.Repeat && page.vWrap == SpineRuntime40.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime40.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime40.TextureFilter.MipMap:
case SpineRuntime40.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime40.TextureFilter.MipMapLinearNearest:
case SpineRuntime40.TextureFilter.MipMapNearestLinear:
case SpineRuntime40.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime41.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime41.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime41.TextureWrap.Repeat && page.vWrap == SpineRuntime41.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime41.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime41.TextureFilter.MipMap:
case SpineRuntime41.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime41.TextureFilter.MipMapLinearNearest:
case SpineRuntime41.TextureFilter.MipMapNearestLinear:
case SpineRuntime41.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
}
public void Load(SpineRuntime42.AtlasPage page, string path)
{
var texture = new SFML.Graphics.Texture(path);
if (page.magFilter == SpineRuntime42.TextureFilter.Linear)
{
texture.Smooth = true;
}
if (page.uWrap == SpineRuntime42.TextureWrap.Repeat && page.vWrap == SpineRuntime42.TextureWrap.Repeat)
{
texture.Repeated = true;
}
switch (page.minFilter)
{
case SpineRuntime42.TextureFilter.Linear:
texture.Smooth = true;
break;
case SpineRuntime42.TextureFilter.MipMap:
case SpineRuntime42.TextureFilter.MipMapNearestNearest:
texture.GenerateMipmap();
break;
case SpineRuntime42.TextureFilter.MipMapLinearNearest:
case SpineRuntime42.TextureFilter.MipMapNearestLinear:
case SpineRuntime42.TextureFilter.MipMapLinearLinear:
texture.Smooth = true;
texture.GenerateMipmap();
break;
}
if (ForceSmooth) texture.Smooth = true;
if (ForceRepeated) texture.Repeated = true;
if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture;
// 似乎是不需要设置的, 因为存在某些 png 和 atlas 大小不同的情况, 一般是有一些缩放, 如果设置了反而渲染异常
// page.width = (int)texture.Size.X;
// page.height = (int)texture.Size.Y;
}
public void Unload(object texture) => ((SFML.Graphics.Texture)texture).Dispose();
}
}