返回

在基于 GLFW 的 Metal 应用程序中如何控制帧速率?

IOS

基于 GLFW 的 Metal 应用程序:如何设置帧率?

问题陈述

在使用 GLFW 窗口 API 的 Metal 应用程序中,帧速率通常被限制在 60 帧/秒。这对于某些应用程序来说可能并不理想,我们希望获得更高的帧速率。本文将指导你如何获取 MTLView 对象并在基于 GLFW 的 Metal 应用程序中修改帧速率。

解决方案

要设置帧速率,请按照以下步骤操作:

  1. 获取 GLFW 窗口:

    NSWindow* window = glfwGetCocoaWindow(glfwWindow);
    
  2. 创建 CAMetalLayer:

    CAMetalLayer* metalLayer = [CAMetalLayer new];
    
  3. 将 CAMetalLayer 设置为窗口的内容视图:

    window.contentView.layer = metalLayer;
    window.contentView.wantsLayer = YES;
    
  4. 获取 MTLView:

    MTLView* metalView = (MTLView*)metalLayer.view;
    
  5. 设置帧速率:

    metalView.preferredFramesPerSecond = desiredFrameRate;  // 将帧速率设置为 desiredFrameRate
    

代码示例

将上述步骤应用到你的示例代码中:

...
CAMetalLayer* metalLayer = [CAMetalLayer new];
...  
NSWindow* window = glfwGetCocoaWindow(glfwWindow);
window.contentView.layer = metalLayer;
window.contentView.wantsLayer = YES;
...
MTLView* metalView = (MTLView*)metalLayer.view;
metalView.preferredFramesPerSecond = 60;
...

常见问题解答

1. 如果我希望帧速率不受限制,我应该如何设置?

metalView.preferredFramesPerSecond = 0;

2. 如何为多个显示器设置不同的帧速率?
你需要为每个显示器创建单独的 CAMetalLayerMTLView

3. 如果我的应用程序在不同的显示器上渲染,如何设置相同的帧速率?
你可以使用 displaySyncEnabled 属性将多个 MTLView 同步到相同的刷新率。

4. 我可以在运行时修改帧速率吗?
是的,你可以通过修改 preferredFramesPerSecond 属性在运行时修改帧速率。

5. 为什么我无法更改帧速率?
确保已将 metalView.preferredFramesPerSecond 设置为有效值(例如,大于 0)。另外,检查是否存在其他限制帧速率的因素,例如垂直同步。

结论

通过遵循本教程中的步骤,你将能够在基于 GLFW 的 Metal 应用程序中成功设置帧速率。这提供了灵活性,可以根据你的具体需求调整应用程序的性能。