Browse Source

Matrix stuff

feature/optimized-matrix
Nikita Tsukanov 3 months ago
parent
commit
a8a6769f72
  1. 4
      src/Avalonia.Base/Rendering/Composition/Server/CompositionMatrix.cs
  2. 2
      src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs
  3. 27
      src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs

4
src/Avalonia.Base/Rendering/Composition/Server/CompositionMatrix.cs

@ -152,7 +152,7 @@ public struct CompositionMatrix(Matrix matrix)
var actual = res.ToMatrix();
if (!expected.Equals(actual))
{
Console.WriteLine("BUG!");
throw new InvalidOperationException("BUG");
}
return res;
@ -224,7 +224,7 @@ public struct CompositionMatrix(Matrix matrix)
var expected = p.Transform(ToMatrix());
if (res != expected)
{
Console.WriteLine("Bug!");
throw new InvalidOperationException("BUG");
}
return res;

2
src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs

@ -43,7 +43,7 @@ internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisua
protected override void RenderCore(ServerVisualRenderContext context, LtrbRect currentTransformedClip)
{
if (_renderCommands != null
&& context.ShouldRenderOwnContent(this, currentTransformedClip))
&& context.ShouldRenderOwnContent(this, ref currentTransformedClip))
{
_renderCommands.Render(context.Canvas);
}

27
src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs

@ -174,13 +174,36 @@ namespace Avalonia.Skia
return sm;
}
public static SKMatrix44 ToSKMatrix44(this CompositionMatrix m)
#if DEBUG_COMPOSITION_MATRIX
{
var rv = ToSKMatrix44Core(m);
var expected = m.ToMatrix().ToSKMatrix44();
if (rv != expected)
throw new Exception();
return rv;
}
public static SKMatrix44 ToSKMatrix44Core(CompositionMatrix m)
#endif
{
if (m.GuaranteedIdentity)
return SKMatrix44.Identity;
if (m.GuaranteedTranslateAndScaleOnly)
{
return new SKMatrix44()
{
M00 = (float)m.ScaleX,
M11 = (float)m.ScaleY,
M22 = 1,
M30 = (float)m.OffsetX,
M31 = (float)m.OffsetY,
M33 = 1
};
}
return new SKMatrix44
{
M00 = (float)m.ScaleX,

Loading…
Cancel
Save