Browse Source

Revert "Revert "fix native api loading.""

This reverts commit ae2aee402d.
pull/11930/head
Max Katz 3 years ago
parent
commit
ce4a8137ee
  1. 31
      src/Skia/Avalonia.Skia/Gpu/Metal/SkiaMetalApi.cs

31
src/Skia/Avalonia.Skia/Gpu/Metal/SkiaMetalApi.cs

@ -2,6 +2,7 @@ using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Avalonia.Compatibility;
using Avalonia.Platform.Interop; using Avalonia.Platform.Interop;
using SkiaSharp; using SkiaSharp;
using BindingFlags = System.Reflection.BindingFlags; using BindingFlags = System.Reflection.BindingFlags;
@ -24,19 +25,23 @@ internal unsafe class SkiaMetalApi
{ {
// Make sure that skia is loaded // Make sure that skia is loaded
GC.KeepAlive(new SKPaint()); GC.KeepAlive(new SKPaint());
var loader = AvaloniaLocator.Current.GetRequiredService<IDynamicLibraryLoader>(); var dll = NativeLibraryEx.Load("libSkiaSharp");
#if NET6_0_OR_GREATER
var dll = NativeLibrary.Load("libSkiaSharp", typeof(SKPaint).Assembly, null); IntPtr address;
#else
var dll = loader.LoadLibrary("libSkiaSharp"); if (NativeLibraryEx.TryGetExport(dll, "gr_direct_context_make_metal_with_options", out address))
#endif {
_gr_direct_context_make_metal_with_options = (delegate* unmanaged[Stdcall] <IntPtr, IntPtr, IntPtr, IntPtr>) _gr_direct_context_make_metal_with_options =
loader.GetProcAddress(dll, "gr_direct_context_make_metal_with_options", false); (delegate* unmanaged[Stdcall] <IntPtr, IntPtr, IntPtr, IntPtr>)address;
_gr_backendrendertarget_new_metal = }
(delegate* unmanaged[Stdcall]<int, int, int, GRMtlTextureInfoNative*, IntPtr>)
loader.GetProcAddress(dll, "gr_backendrendertarget_new_metal", false); if(NativeLibraryEx.TryGetExport(dll, "gr_backendrendertarget_new_metal", out address))
{
_gr_backendrendertarget_new_metal =
(delegate* unmanaged[Stdcall]<int, int, int, GRMtlTextureInfoNative*, IntPtr>)address;
}
_contextCtor = typeof(GRContext).GetConstructor( _contextCtor = typeof(GRContext).GetConstructor(
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null,
new[] { typeof(IntPtr), typeof(bool) }, null) ?? throw new MissingMemberException("GRContext.ctor(IntPtr,bool)"); new[] { typeof(IntPtr), typeof(bool) }, null) ?? throw new MissingMemberException("GRContext.ctor(IntPtr,bool)");

Loading…
Cancel
Save