C# 为两个OpenGL上下文调用WglShareList时诊断错误1008

C# 为两个OpenGL上下文调用WglShareList时诊断错误1008,c#,opengl,sharpgl,C#,Opengl,Sharpgl,调用wglsharelists共享两个OpenGL上下文(使用sharpgl创建)的空间时,我在诊断错误1008的原因时遇到问题。调用返回false,最后检索到的错误代码是1008 我已使这两个OpenGL上下文在构造上完全相同,并确保在调用共享列表函数时这两个上下文都不是最新的。我已经把它简化成了最简单的形式,无法克服这个错误。我还注意到,如果在尝试链接渲染上下文指针之前尝试访问其中一个,错误代码将更改为3221684311。代码如下: static void Main(string[] ar

调用
wglsharelists
共享两个OpenGL上下文(使用sharpgl创建)的空间时,我在诊断错误1008的原因时遇到问题。调用返回false,最后检索到的错误代码是1008

我已使这两个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();

原来问题出在从SharpGL创建渲染上下文中。当您在一个上下文中创建任何缓冲区时,不能将其设置为与另一个现有上下文共享。选择FBO上下文类型时,调用Create方法时,SharpGL会执行一些帧缓冲区创建。通过将渲染上下文类型设置为HiddenWindow,共享工作正常

这绝不是一个解决方案(我想我将不得不编写自己的FBO创建代码来代替SharpGL所做的工作,并将自定义渲染上下文与设备上下文交换),但这最终是我错误的原因