ios - iOS 上的 SCNRenderer 分配时出现错误

标签 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,它不是 nil

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

rendererWithContext:options:

context: An OpenGL rendering context: either a CGLContextObj reference (in OS X) or an EAGLContext object (in iOS).

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

最佳答案

更新:这段代码要小得多,而且看起来效果很好:

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)

关于ios - iOS 上的 SCNRenderer 分配时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27096841/

相关文章:

ios - 使用 SLRequest(无对话框)在 iOS 6 中将视频上传到 Facebook 的示例

ios - 检测 UIPageControl 页面变化

java - 在Android中用手指旋转3D对象

ios - 如何在 SceneKit 中的盒子中创建一个洞?

swift - 以每秒特定速率获取帧位置

swift - HitTest (_ :options:) don't recognize nodes behind ARKit planes

ios - 单击 tableView 中的文本字段时,ScrollView 没有向上移动

ios - View 无法正确显示 Storyboard

ios - 添加 UIViewController 会扰乱屏幕方向

Android GLSL 优化