Я создаю MTLTexture
от CVImageBuffer
(от камеры и игроков) с помощью CVMetalTextureCacheCreateTextureFromImage
, чтобы получить CVMetalTexture
, а затем CVMetalTextureGetTexture
, чтобы получить MTLTexture
.
Проблема, которую я вижу, заключается в том, что когда я позже визуализую текстуру с помощью Metal, я иногда вижу, что видеокадры выведены из строя (визуально она заикается вперед и назад во времени), по-видимому, потому что CoreVideo модифицирует базовый CVImageBuffer
хранилище и MTLTexture
просто указывают там.
Есть ли способ заставить CoreVideo не касаться этого буфера и использовать другой из его пула, пока я не выпущу объект MTLTexture
?
Мое текущее обходное решение - это blitting текстура с помощью MTLBlitCommandEncoder
, но поскольку мне просто нужно удерживать текстуру в течение ~ 30 миллисекунд, что кажется ненужным.