-
-
Notifications
You must be signed in to change notification settings - Fork 370
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hi, is NV_DX_interop2 missing for WGL.Extensions? #2149
Comments
NV_DX_interop2 does not add any new functions therefore it does not have a class generated. For more info see the specification: https://registry.khronos.org/OpenGL/extensions/NV/WGL_NV_DX_interop2.txt |
thanks for reply, yeah i know that, actually it was the usage confused me, so how can i use NV_DX_interop2 with Silk.WGL? i assume that the Overloads will be auto used for those changes in NV_DX_interop2? |
Yes that's correct. |
oops |
hi @Perksey i had applied your changes into my logic (as the official release is not ready yet), ex info: i manage all the created DCs in a single thread. maybe i should wait for new official release? |
2.21 should have fixed this. |
so fast! thanks so much @Perksey [MethodImpl(MethodImplOptions.AggressiveInlining)]
[SupportedOSPlatform("windows")]
private INativeContext CreateNativeContext()
{
return WGL.CreateDefaultContext(["Opengl32"]);
}
// ------
var nativeContext = CreateNativeContext();
using (MakeCurrent())
{
_gl = GL.GetApi(nativeContext);
_wgl= WGL.GetApi(); // new WGL(nativeContext) not work too.
}
// test
var test = _wgl.TryGetExtension(out NVDXInterop ext); |
Please ensure that you're using WGL.GetApi. Please note that the snippet you gave is using GL.GetApi incorrectly - this will only work for OpenGL 1.1 - you need to use a native context that uses wgl.GetProcAddress for the others. I'm not sure why this isn't working, I'll reopen this issue until a community member can investigate further. |
thanks for your suggestion, [MethodImpl(MethodImplOptions.AggressiveInlining)]
private static IntPtr GetProcAddress(string proc)
{
var p = NativeMethods.wglGetProcAddress(proc);
return p != IntPtr.Zero ? p : NativeMethods.GetProcAddress(OpenGl32Handle, proc);
}
using (MakeCurrent())
{
_gl = GL.GetApi(GetProcAddress);
_wgl = WGL.GetApi(); // way auto create `MultiNativeContext`
} i think for |
update: i tried to create WGL with now it has exception, the so i think private static IntPtr GetProcAddress(string proc)
{
var p = NativeMethods.wglGetProcAddress(proc);
return p != IntPtr.Zero ? p : NativeMethods.GetProcAddress(OpenGl32Handle, proc);
} this should be the right way. @Perksey |
works fine now, i have manually written a binding for |
Awesome stuff @jcyuan. I had hoped that this is what the LambdaNativeContext is essentially doing, but it looks like for some reason it's not rolling over to the default context. The null thing is a big oops, feel free to use unsafe accessors to rectify that: [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_extensions")]
extern static ref ConcurrentDictionary<nint, HashSet<string>>? Exts(WGL wgl);
Exts(wgl) = new(); |
This is a way I tried, I hope it can help you. Use TryGetProcAddress instead of GetProcAddress in the GetProcAddress function of MultiNativeContext. public nint GetProcAddress(string proc, int? slot = null)
{
INativeContext[] contexts = Contexts;
for (int i = 0; i < contexts.Length; i++)
{
if (contexts[i]?.TryGetProcAddress(proc, out IntPtr intPtr, slot) ?? false)
{
return intPtr;
}
}
return 0;
} Initialize and assign _extensions in WGL. This can effectively solve the extension problem of WGL. |
I found Silk.NET.WGL.Extensions.NV.NVDXInterop only, but there is no extension for NV_DX_interop2.
or maybe there is, but i missed it?
by the way, what does those
Overloads
mean? for exampleNVDXInteropOverloads
, is this actually theNV_DX_interop2
?thank you so much.
The text was updated successfully, but these errors were encountered: