我正在为 Motion 和 FCP X 开发一些 FxPlug 插件。最终,我想让它们在 Metal 中渲染,因为 Apple 正在弃用 OpenGL。
我目前正在使用 CoreImage,虽然我已经能够使用 CoreImage 功能在 FxPlug SDK 之外进行金属处理,但 FxPlug 只为我提供了作为 OpenGL 纹理的帧。我试过把它传递给 CoreImage 过滤器,但我最终得到了这个错误:
Cannot render image (with an input GL texture) using a metal-DG context.
经过一番研究,我发现我应该可以使用 CVPixelBuffers 在两者之间共享纹理,但是在尝试使用这种方法编写代码一段时间后,我开始相信这是一种编写方式(如,从头开始创建)到共享缓冲区,但不能在两者之间转换。虽然这可能不正确,但我找不到让现有 GL 纹理存在于 CVPixelBuffer 中的方法。
TL; DR:我找到了从 CVPixelBuffer 获取结果 Metal 或 OpenGL 纹理的方法,但我找不到从现有 OpenGL 纹理创建 CVPixelBuffer 的方法。我的心不在这种方法上,因为我的最终目标是简单地从 OpenGL 转换为 Metal,然后再转换回 OpenGL(理想情况下以一种有效的方式)。
有没有其他人找到使用 FxPlug 和 Metal 的方法?有没有一种从 OpenGL 纹理转换为 Metal/CVPixelBuffer 的好方法?