在调用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();
答案 0 :(得分:2)
事实证明问题出在SharpGL的渲染上下文中。在上下文中创建任何缓冲区的那一刻,它无法设置为与另一个现有上下文共享。选择FBO上下文类型时,SharpGL会在调用Create方法时执行一些帧缓冲区创建。通过将渲染上下文类型设置为HiddenWindow,共享工作。
这绝不是一个解决方案(我想我将不得不编写自己的FBO创建代码来代替SharpGL所做的事情,并将自定义渲染上下文与设备上下文交换出来)但最终的原因是我的错误。