|
|
@@ -38,12 +38,10 @@ namespace Avalonia.Win32.OpenGl
|
|
|
|
|
|
[MemberNotNullWhen(true, nameof(s_wglChoosePixelFormatArb))]
|
|
|
[MemberNotNullWhen(true, nameof(s_wglCreateContextAttribsArb))]
|
|
|
- [MemberNotNullWhen(true, nameof(s_glDebugMessageCallback))]
|
|
|
private static bool Initialize() => _initialized ??= InitializeCore();
|
|
|
|
|
|
[MemberNotNullWhen(true, nameof(s_wglChoosePixelFormatArb))]
|
|
|
[MemberNotNullWhen(true, nameof(s_wglCreateContextAttribsArb))]
|
|
|
- [MemberNotNullWhen(true, nameof(s_glDebugMessageCallback))]
|
|
|
private static bool InitializeCore()
|
|
|
{
|
|
|
Dispatcher.UIThread.VerifyAccess();
|
|
|
@@ -74,9 +72,9 @@ namespace Avalonia.Win32.OpenGl
|
|
|
Marshal.GetDelegateForFunctionPointer<WglChoosePixelFormatARBDelegate>(
|
|
|
wglGetProcAddress("wglChoosePixelFormatARB"));
|
|
|
|
|
|
- s_glDebugMessageCallback =
|
|
|
- Marshal.GetDelegateForFunctionPointer<GlDebugMessageCallbackDelegate>(
|
|
|
- wglGetProcAddress("glDebugMessageCallback"));
|
|
|
+ s_glDebugMessageCallback = wglGetProcAddress("glDebugMessageCallback") is { } setDebugCallback && setDebugCallback != default ?
|
|
|
+ Marshal.GetDelegateForFunctionPointer<GlDebugMessageCallbackDelegate>(setDebugCallback) :
|
|
|
+ null;
|
|
|
|
|
|
|
|
|
var formats = new int[1];
|
|
|
@@ -144,8 +142,12 @@ namespace Avalonia.Win32.OpenGl
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- using(new WglRestoreContext(dc, context, null))
|
|
|
- s_glDebugMessageCallback(Marshal.GetFunctionPointerForDelegate(_debugCallback), IntPtr.Zero);
|
|
|
+ if (s_glDebugMessageCallback is not null)
|
|
|
+ {
|
|
|
+ using (new WglRestoreContext(dc, context, null))
|
|
|
+ s_glDebugMessageCallback(Marshal.GetFunctionPointerForDelegate(_debugCallback), IntPtr.Zero);
|
|
|
+ }
|
|
|
+
|
|
|
if (context != IntPtr.Zero)
|
|
|
return new WglContext(shareContext, version, context, window, dc,
|
|
|
_defaultPixelFormat, _defaultPfd);
|