2

我在 Visual Studio Express 2008 中使用 C#。

我也在使用 Tao Framework OpenGL dll。

当我需要重绘时,实际上是什么导致 SimpleOpenGLControl 重绘?

当 SimpleOpenGLControl 驻留在活动窗体上时,为了重绘,我需要做的就是调用glFlush()SimpleOpenGLControl.Invalidate().

但是,当控件不在活动窗体上时,我根本无法重绘它。我找到了一种通过非正统方式使控件无效的方法,但这不会重绘控件的内容(3D 渲染),它只会给我留下一个空白(黑色)控件。

无论哪种形式处于活动状态,我都需要做什么才能使控件实际重绘?

4

1 回答 1

3

显然我的问题不在于 SimpleOpenGLControl 重绘,而在于调用函数的线程。

我的应用程序一直等到它在一个线程中获取新数据,然后通过委托的显示函数将数据传递回表单。

尽管没有引发错误或警告,但显然我的 OpenGL 渲染缓冲区没有被填充,因为填充它的函数是从独立线程调用的。

虽然我不完全理解线程安全函数委托,但我将程序推到了表单运行所在的线程下,我的 OpenGL 渲染缓冲区又一次高兴了。

所以,我的问题的答案是:OpenGL 不会填充任何渲染缓冲区,除非它发生在它被初始化的同一个线程上。

于 2010-01-30T03:13:15.623 回答