C# opentk glcontrol自动渲染?

C# opentk glcontrol自动渲染?,c#,.net,winforms,opengl,opentk,C#,.net,Winforms,Opengl,Opentk,所以我用OpenTK(OpenGL)编写了这个漂亮的c#应用程序。。。它使用了一个全屏的GL窗口,就像它应该的那样,它会在任何时候自动运行OnRenderFrame方法,我得到了一个60 FPS的好游戏 但是,现在我希望在Windows窗体的GLControl中使用我的游戏,而不是GL窗口。不管出于什么原因,它只运行一次onrenderframe方法,仅此而已。我试着使用Application.Idle来运行它,就像他们文档中说的那样,但我最终得到了每秒5帧的效果 我应该如何使它像原始应用程序一

所以我用OpenTK(OpenGL)编写了这个漂亮的c#应用程序。。。它使用了一个全屏的GL窗口,就像它应该的那样,它会在任何时候自动运行OnRenderFrame方法,我得到了一个60 FPS的好游戏

但是,现在我希望在Windows窗体的GLControl中使用我的游戏,而不是GL窗口。不管出于什么原因,它只运行一次onrenderframe方法,仅此而已。我试着使用Application.Idle来运行它,就像他们文档中说的那样,但我最终得到了每秒5帧的效果

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


编辑:基本上我要找的是与游戏类似的东西。运行(60),你将使用它以每秒60帧的速度初始化OpenGL窗口。

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

GLControl是基于事件的,因此只有在手动调用GLControl.Invalidate()后,才会渲染每个帧

事实上,你不需要一直保持高fps。您只需要渲染更改。因此,可变fps可能对您来说已经足够好了,因为它占用的系统资源更少

输入处于活动状态时的Fps值取决于输入设备,例如,我的触摸板每秒可获得约60个事件,而采样频率为1000Hz的4Tech鼠标在相同的基本采样上可获得约750 Fps


无论如何,如果您坚持使用常量fps,您可以在计时器中调用Invalidate(),如上所述。

您可以提供您已经尝试过的代码吗?MainForm.Load事件触发一个Load()方法,该方法表示Application.Idle+=OnRenderFrame;这使我每秒大约有6帧。哇!我发现了一些很奇怪的东西。使用application.idle更新帧,如果我连续在窗口上左右摆动鼠标或按住键盘上的一个键,那么它将保持在每秒60帧的完美速度。为什么会发生这种情况?我怎样才能让它一直发生??