【问题标题】:Using CGDisplayStreamCreate with Metal使用 CGDisplayStreamCreate 和 Metal
【发布时间】:2019-01-23 00:37:37
【问题描述】:

我正在尝试使用 CGDisplayStreamCreate 来捕获显示并在金属着色器中使用纹理。

代码一直有效地从 CGDisplayStreamCreate 获取样本,但我找不到在 Metal 着色器中使用这些样本的方法。

一旦我收到来自 CGDisplayStreamCreate 回调的样本,我会使用 CVPixelBufferCreateWithBytes() 创建一个 CVPixelBuffer,然后调用 CVMetalTextureCacheCreateTextureFromImage() 以从中获取金属纹理。

对 CVMetalTextureCacheCreateTextureFromImage 的调用失败并显示 -6660。

CGDisplayStream api创建的IOSurface似乎与metal不兼容,仅与openGL兼容。

我曾尝试将 kCVPixelBufferMetalCompatibilityKey 属性传递给不同的函数调用,但无济于事。

有没有办法将金属与 CGDisplayStreamCreate 中的缓冲区一起使用?

【问题讨论】:

    标签: macos metal screen-capture


    【解决方案1】:

    嗯,我找到了问题。
    我正在使用CVPixelBufferCreateWithBytes() 创建像素缓冲区,结果为IOSurfaceGetBaseAddress(),但这不起作用。
    解决方案是使用CVPixelBufferCreateWithIOSurface! 来创建像素缓冲区!

    【讨论】:

      猜你喜欢
      • 2019-01-19
      • 2020-06-12
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多