我正在尝试使用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方法创建窗口和上下文?
答案 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()
返回后就是这种情况。