opentk glcontrol自动渲染?

时间:2013-02-18 20:44:09

标签: c# .net winforms opengl opentk

所以我有一个用OpenTK(OpenGL)编写的这个很好的c#应用程序...它使用全屏GL窗口,就像它应该的那样,它会自动运行OnRenderFrame方法,并且我得到了一个很棒的60 FPS游戏

但是,现在我希望在Windows窗体而不是GL窗口中的GLControl中使用我的游戏。无论出于何种原因,它都会运行一次onrenderframe方法,就是这样。我尝试使用Application.Idle来运行它,就像它在文档中说的那样,但我最终得到大约每秒5帧。

我应该如何让它像原始应用程序一样在循环上运行?

编辑:基本上我正在寻找的东西类似于game.Run(60),你将用它来以每秒60帧的速度初始化一个OpenGL窗口。

2 个答案:

答案 0 :(得分:0)

制作一个每1/60秒调用GLControl.Invalidate()的计时器。此外,我不建议使用Application.Idle来运行动画,因为它有意外的行为。你正确地交换缓冲区吗?

答案 1 :(得分:0)

GLControl是基于事件的,因此每个帧都只能在手动GLControl.Invalidate()调用之后呈现。

实际上你并不需要高fps。您只需要渲染更改。所以变量fps可能对你有好处,因为它需要较少的系统资源。

输入有效时的Fps值取决于输入设备,例如,我的触摸板每秒获得约60个事件,而采用1000Hz采样频率的a4tech鼠标在同一基本样本上获得~750 fps。

无论如何,如果你坚持不变的fps,你可以在计时器中调用Invalidate(),如上所述。