在c#backgroudWorker中运行opengl

时间:2017-01-17 05:11:55

标签: c# opengl

最近,我正在学习OpenGL for C#。我需要的基本结构是:

用户界面计算 =>在单独的窗口中绘制OpenGL
=>用户界面中的更多计算。

到目前为止,程序总是在第二步冻结(做一个窗口,绘制一些东西,然后就是这样)。我试过了:

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    //Draw the image on the window
    Glut.glutIdleFunc(OnRenderFrame);
    Glut.glutDisplayFunc(OnDisplay);
    Glut.glutCloseFunc(OnClose);
    Glut.glutMainLoop();
}

并致电

public Form1()
{
    InitializeComponent();
    //initialize the window, the shapes, shader, and some other stuff
    backgroundWorker1.RunWorkerAsync();
}

但它不起作用。我还尝试将绘图代码放在button_Click和其他一些中,但到目前为止都没有。谁能帮帮我呢?

PS:我从GiawaVideos学习OpenGL,我也尝试过这个问题,但考虑到他们的最后一个视频是2年前,我没有太大的希望。

1 个答案:

答案 0 :(得分:0)

似乎BackgroundWorker不能用于影响UI中的任何内容(顺便提一下,它也包括OpenGL窗口)。因此,我只需要找到一种方法来绘制代码以便单独运行,而技术上"仍然在Timer.Tick的同一个帖子中。现在的代码是:

public Form1()
{
     InitializeComponent();
     //initialize the window, the shapes, shader, and some other stuff
     timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
     //Draw stuff, not affecting the main UI thread flow
}