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

时间:2014-01-10 20:45:23

标签: 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.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上调用它会因为空引用异常而崩溃。 我认为,这种情况发生了,因为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方法创建窗口和上下文?

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。来自documentation

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);

请注意,当您致电new GraphicsContext()时,必须创建GLUT上下文并保持最新状态。根据{{​​3}},glutCreateWindow()返回后就是这种情况。