Я работаю над разработкой некоторых подключаемых модулей FxPlug для Motion и FCP X. В конечном итоге я бы хотел, чтобы они отображались в 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: Я нашел способы получить результирующую текстуру Metal или OpenGL ИЗ CVPixelBuffer, но я не могу найти способ создать CVPixelBuffer из существующей текстуры OpenGL. Мое сердце не настроено на этот метод, поскольку моя конечная цель - просто преобразовать из OpenGL в Metal, а затем обратно в OpenGL (в идеале эффективным способом).
Кто-нибудь еще нашел способ работы с FxPlug with Metal? Есть ли хороший способ преобразовать текстуру OpenGL в Metal / CVPixelBuffer?
(GLuint)textureId;
и(GLenum)target;
, и я не нашел способа использовать ни один из них для копирования в CVPixelBuffer. - person mredig   schedule 20.12.2018