最近,我正在学习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年前,我没有太大的希望。
答案 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
}