我不明白这里的一些难题。C++ 开发人员只需调用wglCreateContext
一次即可设置上下文(无论是虚拟上下文还是它们的主上下文)。建议 AC# 开发人员调用wglCreateContext
两次来设置上下文(如果第一次调用失败,则忽略第一次调用的结果)。
例如,下面是OpenTK源代码的摘录:
Handle = new ContextHandle(Wgl.Imports.CreateContext(window.DeviceContext));
if (Handle == ContextHandle.Zero)
Handle = new ContextHandle(Wgl.Imports.CreateContext(window.DeviceContext));
if (Handle == ContextHandle.Zero)
throw new GraphicsContextException(
String.Format("Context creation failed. Wgl.CreateContext() error: {0}.",
Marshal.GetLastWin32Error()));
据我了解,opengl32.dll
似乎覆盖了一些公开的 API gdi32.dll
(例如ChoosePixelFormat
),因此加载这些 DLL 的顺序很重要。对于 C++,我认为这意味着链接库的顺序很重要。使用 C#,您不需要链接库,并且DllImport
会进行延迟加载,因此我认为两次调用该函数会以某种方式最终使排序正确。
谁能确认发生了什么?