我在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中)。
为什么我认为我收到此错误?
答案 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)