【问题标题】:Use SceneKit to render an CVOpenGLTextureRef使用 SceneKit 渲染一个 CVOpenGLTextureRef
【发布时间】:2016-05-29 01:07:26
【问题描述】:
我正在使用AVCaptureSession,并以 60fps 的速度输出 CVOpenGLTextureRef,我需要使用 SceneKit 来显示。
我相当确定我应该使用SCNProgramDelegate 方法bindValueForSymbol:,但不能完全弄清楚绑定纹理参考的机制。我见过的例子使用GLKTextureInfo 对象,并将其name 属性与对glBindTexture() 的调用绑定。
使用CVOpenGLTextureRef 执行此操作的等效机制是什么?
【问题讨论】:
标签:
objective-c
macos
cocoa
opengl
scenekit
【解决方案1】:
一个相对简单的解决方案可能是使用AVCaptureVideoPreviewLayer。您可以将其直接设置为要在其上显示帧的几何体的漫反射材质的内容,并且您可以从 Apple 为此(可能)完成的所有优化工作中受益。 AVFoundation 和 SceneKit 将为您处理所有细节。
如果您在 CPU 上处理传入缓冲区的工作,还有较低级别的 AVSampleBufferDisplayLayer 类,它允许您传递 CMSampleBufferRef 对象,您可以从 CVPixelBufferRef 构建这些对象。喂养和照顾有点困难,但并非不可能。