Использование CGDisplayStreamCreate с металлом - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь использовать CGDisplayStreamCreate для захвата изображения и использования текстур в металлическом шейдере.

Код работает до получения сэмплов обратно из CGDisplayStreamCreate, но я не могу найти способ использоватьэти образцы в металлическом шейдере.

Как только я получаю образец из обратного вызова CGDisplayStreamCreate, я создаю CVPixelBuffer с CVPixelBufferCreateWithBytes (), а затем вызываю CVMetalTextureCacheCreateTextureFromImage *) (100) для получения текстуры металла.1006 * Вызов CVMetalTextureCacheCreateTextureFromImage завершается с -6660.

Кажется, что IOSurface, созданный API CGDisplayStream, не совместим с металлом, но только с openGL.

Я пытался передать атрибуты kCVPixelBompatiBк различным вызовам функций безрезультатно.

Есть ли способ использовать металл с буферами из CGDisplayStreamCreate?

1 Ответ

0 голосов
/ 23 января 2019

Ну, я нашел проблему. Я создавал пиксельный буфер с помощью CVPixelBufferCreateWithBytes () с результатом IOSurfaceGetBaseAddress (), и это не работает. Решение состоит в том, чтобы создать пиксельный буфер с помощью CVPixelBufferCreateWithIOSurface!

...