ここのパズルのピースのいくつかがわかりません。C++ 開発者はwglCreateContext
、コンテキスト (ダミー コンテキストかメイン コンテキストか) を設定するために 1 回呼び出すだけで済みます。AC# 開発者は、 wglCreateContext
2 回呼び出してコンテキストをセットアップすることをお勧めします (最初の呼び出しが失敗した場合は、その結果を無視します)。
たとえば、これは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 の一部( . C++ では、ライブラリをリンクする順序が重要であることを意味すると思います。C# では、ライブラリをリンクせず、遅延読み込みを行うため、関数を 2 回呼び出すと、最終的に正しい順序が得られると思います。gdi32.dll
ChoosePixelFormat
DllImport
誰が何が起こっているのか確認できますか?