diff --git a/src/Artemis.Core/Models/Profile/Layer.cs b/src/Artemis.Core/Models/Profile/Layer.cs
index f363c3d03..6e7df90c0 100644
--- a/src/Artemis.Core/Models/Profile/Layer.cs
+++ b/src/Artemis.Core/Models/Profile/Layer.cs
@@ -287,6 +287,7 @@ namespace Artemis.Core.Models.Profile
using (var paint = new SKPaint())
{
+ paint.FilterQuality = SKFilterQuality.Low;
paint.BlendMode = General.BlendMode.CurrentValue;
paint.Color = new SKColor(0, 0, 0, (byte) (Transform.Opacity.CurrentValue * 2.55f));
diff --git a/src/Artemis.UI.Shared/Services/ProfileEditorService.cs b/src/Artemis.UI.Shared/Services/ProfileEditorService.cs
index ee23c561f..59b90bf56 100644
--- a/src/Artemis.UI.Shared/Services/ProfileEditorService.cs
+++ b/src/Artemis.UI.Shared/Services/ProfileEditorService.cs
@@ -102,6 +102,8 @@ namespace Artemis.UI.Shared.Services
{
layer.OverrideProgress(CurrentTime);
layer.LayerBrush?.Update(delta.TotalSeconds);
+ foreach (var baseLayerEffect in layer.LayerEffects)
+ baseLayerEffect.Update(delta.TotalSeconds);
}
_lastUpdateTime = CurrentTime;
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerEffects/EffectsView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerEffects/EffectsView.xaml
index cb720b948..b08a06563 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerEffects/EffectsView.xaml
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerEffects/EffectsView.xaml
@@ -40,8 +40,8 @@
-
-
+
+
diff --git a/src/Plugins/Artemis.Plugins.LayerEffects.Filter/BlurEffect.cs b/src/Plugins/Artemis.Plugins.LayerEffects.Filter/BlurEffect.cs
index c7bf0cd25..b5c08913b 100644
--- a/src/Plugins/Artemis.Plugins.LayerEffects.Filter/BlurEffect.cs
+++ b/src/Plugins/Artemis.Plugins.LayerEffects.Filter/BlurEffect.cs
@@ -1,10 +1,15 @@
-using Artemis.Core.Plugins.LayerEffect.Abstract;
+using System;
+using Artemis.Core.Plugins.LayerEffect.Abstract;
using SkiaSharp;
namespace Artemis.Plugins.LayerEffects.Filter
{
public class BlurEffect : LayerEffect
{
+ private double _lastWidth;
+ private double _lastHeight;
+ private SKImageFilter _imageFilter;
+
public override void EnableLayerEffect()
{
}
@@ -15,15 +20,27 @@ namespace Artemis.Plugins.LayerEffects.Filter
public override void Update(double deltaTime)
{
+ if (Math.Abs(Properties.BlurAmount.CurrentValue.Width - _lastWidth) > 0.01 || Math.Abs(Properties.BlurAmount.CurrentValue.Height - _lastHeight) > 0.01)
+ {
+ if (Properties.BlurAmount.CurrentValue.Width <= 0 && Properties.BlurAmount.CurrentValue.Height <= 0)
+ _imageFilter = null;
+ else
+ {
+ _imageFilter = SKImageFilter.CreateBlur(
+ Properties.BlurAmount.CurrentValue.Width,
+ Properties.BlurAmount.CurrentValue.Height
+ );
+ }
+
+ _lastWidth = Properties.BlurAmount.CurrentValue.Width;
+ _lastHeight = Properties.BlurAmount.CurrentValue.Height;
+ }
}
public override void PreProcess(SKCanvas canvas, SKImageInfo canvasInfo, SKPath path, SKPaint paint)
{
- paint.ImageFilter = SKImageFilter.CreateBlur(
- Properties.BlurAmount.CurrentValue.Width,
- Properties.BlurAmount.CurrentValue.Height,
- paint.ImageFilter
- );
+ if (_imageFilter != null)
+ paint.ImageFilter = SKImageFilter.CreateMerge(paint.ImageFilter, _imageFilter);
}
public override void PostProcess(SKCanvas canvas, SKImageInfo canvasInfo, SKPath path, SKPaint paint)
diff --git a/src/Plugins/Artemis.Plugins.LayerEffects.Filter/FilterEffectProvider.cs b/src/Plugins/Artemis.Plugins.LayerEffects.Filter/FilterEffectProvider.cs
index ca1fe61d1..f1973786d 100644
--- a/src/Plugins/Artemis.Plugins.LayerEffects.Filter/FilterEffectProvider.cs
+++ b/src/Plugins/Artemis.Plugins.LayerEffects.Filter/FilterEffectProvider.cs
@@ -6,7 +6,11 @@ namespace Artemis.Plugins.LayerEffects.Filter
{
public override void EnablePlugin()
{
- AddLayerEffectDescriptor("Blur", "A layer effect providing a blur filter effect", "BlurOn");
+ AddLayerEffectDescriptor(
+ "Blur",
+ "A layer effect providing a blur filter effect. \r\nNote: CPU intensive, best to only use on small layers or for a short period of time.",
+ "BlurOn"
+ );
AddLayerEffectDescriptor("Dilate", "A layer effect providing a dilation filter effect", "EyePlus");
AddLayerEffectDescriptor("Erode", "A layer effect providing an erode filter effect", "EyeMinus");
AddLayerEffectDescriptor("Glow", "A layer effect providing a glow filter effect", "BoxShadow");