From 3ad600f4dcf0ee7c689387e3bce7bbd9a70d9c97 Mon Sep 17 00:00:00 2001 From: Dylan Perks Date: Mon, 9 Oct 2023 21:23:05 -0500 Subject: [PATCH] Add a hack for #1691 --- src/OpenAL/Silk.NET.OpenAL/AL/AL.cs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/OpenAL/Silk.NET.OpenAL/AL/AL.cs b/src/OpenAL/Silk.NET.OpenAL/AL/AL.cs index a50ad58a95..2f9049d8ea 100644 --- a/src/OpenAL/Silk.NET.OpenAL/AL/AL.cs +++ b/src/OpenAL/Silk.NET.OpenAL/AL/AL.cs @@ -26,7 +26,26 @@ public AL(INativeContext ctx) } /// - public override partial bool IsExtensionPresent(string name); + public override unsafe bool IsExtensionPresent(string name) + { + if (name.StartsWith("ALC_")) + { + // extreme hack for ALC_EXT_EFX which does not have a standard AL variant + var maxName = SilkMarshal.GetMaxSizeOf(name, NativeStringEncoding.UTF8); + var nameNative = name.Length > 256 ? new byte[maxName] : stackalloc byte[maxName]; + SilkMarshal.StringIntoSpan(name, nameNative, NativeStringEncoding.UTF8); + fixed (byte* namePtr = nameNative) + { + return ((delegate* unmanaged[Cdecl]) Context.GetProcAddress("alcIsExtensionPresent")) + (namePtr) == 1; + } + } + + return CoreIsExtensionPresent(name); + } + + [NativeApi(EntryPoint = nameof(IsExtensionPresent))] + private partial bool CoreIsExtensionPresent(string name); /// public SearchPathContainer SearchPaths => _searchPaths ??= new OpenALLibraryNameContainer(_soft);