2010-01-29 112 views
2

我使用C#与Visual Studio Express 2008.陶OpenGL框架SimpleOpenGLControl - 它什么时候重绘,什么时候不会?

我也使用陶框架OpenGL dll。

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

当SimpleOpenGLControl驻留在活动窗体上时,我需要重新绘制的所有内容都是调用glFlush()SimpleOpenGLControl.Invalidate()

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

为了让控件实际重绘,无论哪种表单处于活动状态,我需要做什么?

回答

3

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

我的应用程序等待,直到它获得一个线程中的新数据,然后通过委托显示功能将数据传回给表单。

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

虽然我不完全理解线程安全函数委托,但是我通过线程运行窗体的方式来推送过程,并且我的OpenGL渲染缓冲区再次开心。

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

相关问题