diff --git a/Spine/SpineObject.cs b/Spine/SpineObject.cs
index d5735d7..1c13496 100644
--- a/Spine/SpineObject.cs
+++ b/Spine/SpineObject.cs
@@ -177,7 +177,6 @@ namespace Spine
// 拷贝调试属性
EnableDebug = other.EnableDebug;
DebugTexture = other.DebugTexture;
- DebugNonTexture = other.DebugNonTexture;
DebugBounds = other.DebugBounds;
DebugBones = other.DebugBones;
DebugRegions = other.DebugRegions;
@@ -253,15 +252,10 @@ namespace Spine
///
public bool DebugTexture { get; set; } = true;
- ///
- /// 是否显示非纹理内容, 一个总开关
- ///
- public bool DebugNonTexture { get; set; } = true;
-
///
/// 显示包围盒
///
- public bool DebugBounds { get; set; } = true;
+ public bool DebugBounds { get; set; } = false;
///
/// 显示骨骼
@@ -864,7 +858,7 @@ namespace Spine
else
{
if (DebugTexture) DrawTexture(target, states);
- if (DebugNonTexture) DrawNonTexture(target);
+ DrawNonTexture(target);
}
}
diff --git a/SpineViewer/Models/SpineObjectModel.cs b/SpineViewer/Models/SpineObjectModel.cs
index 3a8c549..116d266 100644
--- a/SpineViewer/Models/SpineObjectModel.cs
+++ b/SpineViewer/Models/SpineObjectModel.cs
@@ -42,7 +42,7 @@ namespace SpineViewer.Models
///
public SpineObjectModel(string skelPath, string? atlasPath = null, SpineVersion? version = null)
{
- _spineObject = new(skelPath, atlasPath, version) { DebugNonTexture = false };
+ _spineObject = new(skelPath, atlasPath, version);
_skins = _spineObject.Data.Skins.Select(v => v.Name).ToImmutableArray();
_slotAttachments = _spineObject.Data.SlotAttachments.ToFrozenDictionary(it => it.Key, it => it.Value.Keys);
_animations = _spineObject.Data.Animations.Select(v => v.Name).ToImmutableArray();
@@ -73,7 +73,7 @@ namespace SpineViewer.Models
public bool IsSelected
{
get { lock (_lock) return _isSelected; }
- set { lock (_lock) if (SetProperty(ref _isSelected, value)) _spineObject.DebugNonTexture = _isSelected; }
+ set { lock (_lock) SetProperty(ref _isSelected, value); }
}
private bool _isSelected = false;
diff --git a/SpineViewer/ViewModels/SFMLRendererViewModel.cs b/SpineViewer/ViewModels/SFMLRendererViewModel.cs
index 244d6e6..15f53ac 100644
--- a/SpineViewer/ViewModels/SFMLRendererViewModel.cs
+++ b/SpineViewer/ViewModels/SFMLRendererViewModel.cs
@@ -31,6 +31,16 @@ namespace SpineViewer.ViewModels
private readonly ObservableCollectionWithLock _models;
private readonly ISFMLRenderer _renderer;
+ ///
+ /// 被选中对象的背景颜色
+ ///
+ private static readonly SFML.Graphics.Color _selectedBackgroundColor = new(255, 255, 255, 50);
+
+ ///
+ /// 被选中对象背景顶点缓冲区
+ ///
+ private readonly SFML.Graphics.VertexArray _selectedBackgroundVertices = new(SFML.Graphics.PrimitiveType.Quads, 4); // XXX: 暂时未使用 Dispose 释放
+
///
/// 预览画面坐标轴颜色
///
@@ -381,6 +391,18 @@ namespace SpineViewer.ViewModels
sp.Update(0); // 避免物理效果出现问题
sp.Update(delta);
+ // 为选中对象绘制一个半透明背景
+ if (sp.IsSelected)
+ {
+ var rc = sp.GetCurrentBounds().ToFloatRect();
+ _selectedBackgroundVertices[0] = new(new(rc.Left, rc.Top), _selectedBackgroundColor);
+ _selectedBackgroundVertices[1] = new(new(rc.Left + rc.Width, rc.Top), _selectedBackgroundColor);
+ _selectedBackgroundVertices[2] = new(new(rc.Left + rc.Width, rc.Top + rc.Height), _selectedBackgroundColor);
+ _selectedBackgroundVertices[3] = new(new(rc.Left, rc.Top + rc.Height), _selectedBackgroundColor);
+ _renderer.Draw(_selectedBackgroundVertices);
+ }
+
+ // 仅在预览画面临时启用调试模式
sp.EnableDebug = true;
_renderer.Draw(sp);
sp.EnableDebug = false;