iOS上的SCNRenderer在分配时会出错

时间:2014-11-24 02:01:37

标签: ios opengl-es scenekit

我在iOS上创建SCNRenderer以进行屏幕外渲染,我不知道为什么我会收到错误说:

"线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)"

我的代码中唯一的事情是创建这个" SCNRenderer"。此函数调用viewDidAppear:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    openGLContext = EAGLContext(API: .OpenGLES2)
    var renderer = SCNRenderer(context: &openGLContext, options: nil)

}

我检查了openGLContext,它不是

我也检查过,SCNRenderer在iOS 8上可用

  

rendererWithContext:options:

     

context:OpenGL渲染上下文:CGLContextObj引用(在OS X中)或EAGLContext对象(在iOS中)。

为什么我认为我收到此错误?

2 个答案:

答案 0 :(得分:1)

更新:此代码更小,看起来效果很好:

let renderer = SCNRenderer(context: unsafeBitCast(eaglContext, UnsafeMutablePointer.self), options: nil)

- 老答复 -

现在我只使用这个解决方法Objective-C类。

@import SceneKit;

@interface SCNRenderer (SwiftiOSWorkaround)
+ (instancetype)rendererWithContextObject:(EAGLContext *)eaglContext options:(NSDictionary *)options;
@end

@implementation SCNRenderer (SwiftiOSWorkaround)
+ (instancetype)rendererWithContextObject:(EAGLContext *)eaglContext options:(NSDictionary *)options;
{
    return [self rendererWithContext:(__bridge void *)eaglContext options:options];
}
@end

然后,您可以使用以下命令从Swift创建SCNRenderer:

var renderer = SCNRenderer(contextObject: openGLContext, options: nil)

答案 1 :(得分:0)

您不需要传递openGLContext的地址。它是指向EAGLContext对象的指针。

var renderer = SCNRenderer(context: openGLContext, options: nil)