2

wglsharelists2 つの OpenGL コンテキスト (sharpgl を使用して作成) のスペースを共有するために呼び出すときに、エラー 1008 の原因を診断するのに苦労しています。呼び出しは false を返し、最後に取得されたエラー コードは 1008 です。

2 つの OpenGL コンテキストの構造を同一にし、共有リスト関数を呼び出すときにどちらも最新でないことを確認しました。私はそれを最も単純な形式に切り詰めましたが、このエラーを乗り越えることはできません。また、レンダー コンテキスト ポインターをリンクしようとする前にいずれかにアクセスしようとすると、エラー コードが 3221684311 に変わることにも気付きました。コードは以下のとおりです。

static void Main(string[] args)
{

    OpenGL gl1 = new OpenGL();
    gl1.Create(SharpGL.Version.OpenGLVersion.OpenGL3_1, RenderContextType.FBO, 1, 1, 16, null);

    OpenGL gl2 = new OpenGL();
    gl2.Create(SharpGL.Version.OpenGLVersion.OpenGL3_1, RenderContextType.FBO, 1, 1, 16, null);

    IntPtr rc1 = gl1.RenderContextProvider.RenderContextHandle;
    IntPtr rc2 = gl2.RenderContextProvider.RenderContextHandle;

    //These lines when uncommented change the return error to 3221684311
    //Debug.WriteLine("Render Context 1: " + rc1.ToString());
    //Debug.WriteLine("Render Context 2: " + rc1.ToString());

    Debug.WriteLine(Win32.wglMakeCurrent(IntPtr.Zero, IntPtr.Zero));

    Debug.WriteLine(Win32.wglShareLists(rc1, rc2));
    Debug.WriteLine(GetLastError());
}

[DllImport("Kernel32.dll", SetLastError = true)]
private extern static UInt32 GetLastError();
4

1 に答える 1

2

問題は、SharpGL からのレンダー コンテキストの作成にあることが判明しました。コンテキストでバッファを作成した時点で、別の既存のコンテキストと共有するように設定することはできません。FBO コンテキスト タイプを選択すると、Create メソッドが呼び出されると、SharpGL はフレーム バッファの作成を実行します。レンダー コンテキスト タイプを HiddenWindow に設定すると、共有が機能しました。

これは決して解決策ではありません (SharpGL の代わりに独自の FBO 作成コードを記述し、カスタム レンダー コンテキストをデバイス コンテキストと交換する必要があると思います) が、最終的にはエラーの原因です。 .

于 2018-03-09T04:34:01.747 に答える