C# 我可以让OpenTK和Tao.FreeGlut一起工作吗?

C# 我可以让OpenTK和Tao.FreeGlut一起工作吗?,c#,opengl,initialization,opentk,tao-framework,C#,Opengl,Initialization,Opentk,Tao Framework,我正在尝试使用Tao.FreeGlut 2.1.0初始化窗口,并使用OpenTK 1.1初始化drawind,因此我制作了一个简单的程序: public static void Main() { Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_DOUBLE | Glut.GLUT_RGBA); Glut.glutInitWindowSize(1024, 768); Glut.glutInitWindowPos

我正在尝试使用Tao.FreeGlut 2.1.0初始化窗口,并使用OpenTK 1.1初始化drawind,因此我制作了一个简单的程序:

public static void Main()
{
    Glut.glutInit();
    Glut.glutInitDisplayMode(Glut.GLUT_DOUBLE | Glut.GLUT_RGBA);
    Glut.glutInitWindowSize(1024, 768);
    Glut.glutInitWindowPosition(100, 100);
    Glut.glutCreateWindow("Test");
    Glut.glutDisplayFunc(RenderScene);

    GL.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);

    Glut.glutMainLoop();
}

public static void RenderScene()
{
    GL.Clear(ClearBufferMask.ColorBufferBit);
    Glut.glutSwapBuffers();
}
但是在
GL.ClearColor
调用时,它会崩溃,出现null ref异常。 我认为,这种情况会发生,因为OpenTK存储它自己的OpenGL上下文,它不等于Glut创建的上下文,并且没有正确初始化。我没有找到任何从Glut获取上下文的方法,然后我尝试了以下方法:

IWindowInfo window = Utilities.CreateWindowsWindowInfo(Glut.glutGetWindowData());
GraphicsContext context = new GraphicsContext(GraphicsMode.Default, window);
context.MakeCurrent(window);
context.LoadAll();
现在它在创建上下文时崩溃了,不管怎样,这个窗口不适合OpenTK


那么,有没有办法修复它并将Glut与OpenTK一起使用呢?或者我一定不能使用Glut并使用OpenTK方法创建窗口和上下文吗?

是的,这是可能的。从:

请注意,在调用
new GraphicsContext()
时,必须创建GLUT上下文并将其设置为当前上下文。根据,在
glutCreateWindow()
返回之后就是这种情况

Glut.glutCreateWindow("Test");

// Initialize OpenTK using the current GLUT context
var opentk_context = new GraphicsContext(ContextHandle.Zero, null);

// You can now call GL functions freely
GL.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);