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