Browse Source

It woooorks

flabbet 11 tháng trước cách đây
mục cha
commit
6bcdb70788

+ 1 - 1
src/PixiEditor.DrawingApi.Core/Texture.cs

@@ -60,7 +60,7 @@ public class Texture : IDisposable
 
 
         var surface = new Texture(new VecI(image.Width, image.Height));
         var surface = new Texture(new VecI(image.Width, image.Height));
         surface.GpuSurface.Canvas.DrawImage(image, 0, 0);
         surface.GpuSurface.Canvas.DrawImage(image, 0, 0);
-        
+
         return surface;
         return surface;
     }
     }
 
 

+ 8 - 9
src/PixiEditor/Views/Overlays/ReferenceLayerOverlay.cs

@@ -88,16 +88,15 @@ internal class ReferenceLayerOverlay : Overlay
             double opacity = Opacity;
             double opacity = Opacity;
             var referenceBitmap = ReferenceLayer.ReferenceBitmap;
             var referenceBitmap = ReferenceLayer.ReferenceBitmap;
 
 
+            referenceBitmap.GpuSurface.Flush();
+            Paint paint = new Paint
+            {
+                Color = new Color(255, 255, 255, (byte)(opacity * 255)),
+                BlendMode = BlendMode.SrcOver
+            };
+            
             DrawTextureOperation drawOperation =
             DrawTextureOperation drawOperation =
-                new DrawTextureOperation(dirtyRect, Stretch.None, referenceBitmap/*, canvas =>
-                {
-                    using Paint opacityPaint = new Paint();
-                    opacityPaint.Color = new Color(255, 255, 255, (byte)(255 * opacity));
-                    opacityPaint.BlendMode = BlendMode.SrcOver;
-
-                    canvas.DrawSurface(referenceBitmap.GpuSurface.Native as SKSurface, 0, 0,
-                        opacityPaint.Native as SKPaint);
-                }*/);
+                new DrawTextureOperation(dirtyRect, Stretch.None, referenceBitmap, paint);
 
 
             context.Custom(drawOperation);
             context.Custom(drawOperation);
 
 

+ 11 - 5
src/PixiEditor/Views/Visuals/TextureControl.cs

@@ -6,6 +6,7 @@ using Avalonia.Skia;
 using Avalonia.Threading;
 using Avalonia.Threading;
 using PixiEditor.DrawingApi.Core;
 using PixiEditor.DrawingApi.Core;
 using PixiEditor.DrawingApi.Core.Bridge;
 using PixiEditor.DrawingApi.Core.Bridge;
+using PixiEditor.DrawingApi.Core.Surfaces.PaintImpl;
 using PixiEditor.DrawingApi.Skia.Implementations;
 using PixiEditor.DrawingApi.Skia.Implementations;
 using PixiEditor.Numerics;
 using PixiEditor.Numerics;
 
 
@@ -100,27 +101,32 @@ internal class DrawTextureOperation : SkiaDrawOperation
     public Stretch Stretch { get; }
     public Stretch Stretch { get; }
     public VecD TargetSize { get; }
     public VecD TargetSize { get; }
     public Texture Texture { get; }
     public Texture Texture { get; }
+    public Paint? Paint { get; }
+    
 
 
-    public DrawTextureOperation(Rect dirtyBounds, Stretch stretch, Texture texture) :
+    public DrawTextureOperation(Rect dirtyBounds, Stretch stretch, Texture texture, Paint paint = null) :
         base(dirtyBounds)
         base(dirtyBounds)
     {
     {
         Stretch = stretch;
         Stretch = stretch;
         Texture = texture;
         Texture = texture;
         TargetSize = new VecD(texture.Size.X, texture.Size.Y);
         TargetSize = new VecD(texture.Size.X, texture.Size.Y);
+        Paint = paint;
     }
     }
 
 
     public override void Render(ISkiaSharpApiLease lease)
     public override void Render(ISkiaSharpApiLease lease)
     {
     {
         SKCanvas canvas = lease.SkCanvas;
         SKCanvas canvas = lease.SkCanvas;
-        
-        Texture.GpuSurface.Canvas.Flush();
+
+        GRContext original = (DrawingBackendApi.Current.SurfaceImplementation as SkiaSurfaceImplementation).GrContext;
         
         
         (DrawingBackendApi.Current.SurfaceImplementation as SkiaSurfaceImplementation).GrContext = lease.GrContext;
         (DrawingBackendApi.Current.SurfaceImplementation as SkiaSurfaceImplementation).GrContext = lease.GrContext;
-        
+
         canvas.Save();
         canvas.Save();
         ScaleCanvas(canvas);
         ScaleCanvas(canvas);
-        canvas.DrawSurface(Texture.GpuSurface.Native as SKSurface, 0, 0); 
+        canvas.DrawSurface(Texture.GpuSurface.Native as SKSurface, 0, 0, Paint?.Native as SKPaint ?? null);
         canvas.Restore();
         canvas.Restore();
+        
+        (DrawingBackendApi.Current.SurfaceImplementation as SkiaSurfaceImplementation).GrContext = original;
     }
     }
 
 
     private void ScaleCanvas(SKCanvas canvas)
     private void ScaleCanvas(SKCanvas canvas)