0

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

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

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

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

4

2 回答 2

1

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

实际上,您并不总是需要高 fps。您只需要渲染更改。因此,可变 fps 可能对您来说已经足够好,因为它占用的系统资源更少。

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

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

于 2016-03-05T15:37:18.337 回答
0

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

于 2014-06-10T21:56:43.187 回答