【问题标题】:Force SCNView to use OpenGL强制 SCNView 使用 OpenGL
【发布时间】:2015-11-20 11:56:48
【问题描述】:

当使用 Xcode 7 并创建一个新的 SceneKit OS X 项目时,它似乎默认使用 Metal 作为 SCNView。

如果我在 Xcode 7 中创建新游戏项目后尝试这样做:

var context = gameView.context

结果为零。该视图使用的是 Metal 而不是 OpenGL。

但是,在 Xcode 6.4 中创建相同的内容,上下文就如预期的那样存在。

如何强制我的 SCNView 使用 OpenGL 而不是 Metal?

【问题讨论】:

  • 这是一件好事,但这不是您应该寻求的解决方案。

标签: macos opengl scenekit metal


【解决方案1】:

创建 SCNView 时,您可以选择在初始化程序中设置渲染器:

https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNView_Class/index.html#//apple_ref/occ/instm/SCNView/initWithFrame:options:

这些是您可用的选项,Metal 或 OpenGL ES 2.0(3.0 可能会在以后出现):

https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNSceneRenderer_Protocol/index.html#//apple_ref/c/tdef/SCNRenderingAPI

所以设置为 SCNRenderingAPIOpenGLES2 会得到你想要的,一个强制 OpenGL ES 2.0 渲染的 SceneKit 视图

【讨论】:

  • 为什么您认为可能支持 OpenGL ES 3.0?我认为 Apple 没有任何动力支持它。
  • 谢谢,这解决了问题。我正在查看 OS X api(不包含 10.11 API 更改)。 Interface Builder 中还有一个可用于 SCNView 的 Rendering API 下拉菜单。
  • 这是应该如何设置的:SCNView(frame: view.bounds, options: ["preferredRenderingAPI": SCNRenderingAPI.openGLES2]) 因为它不适合我:(
  • @Guig 最近没试过。直到最近,在向 Apple 报告 SceneKit 的渲染问题时,我都被忽略了。因此,我对处理其许多问题的复杂性失去了兴趣。这不是正在进行中的工作。在最好的情况下,SceneKit 是一种意图声明,但很快就会被 Apple 忽视。我希望他们会在几个 iOS 版本中放弃它,并为 2D 和 3D 发布基于 Metal 的引擎。支持和更新同样令人沮丧。
  • 如果还有人在找,Swift 3中用OpenGL初始化的正确方法是:SCNView(frame: frame, options: [SCNView.Option.preferredRenderingAPI.rawValue: NSNumber(value: SCNRenderingAPI.openGLES2.rawValue)])
【解决方案2】:

您可以使用下面的代码轻松完成

let scnView = SCNView(frame: .zero, options: [SCNView.Option.preferredRenderingAPI.rawValue : NSNumber(value: SCNRenderingAPI.openGLES2.rawValue)])

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2014-12-31
    • 2021-03-07
    • 2011-08-11
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多