Рендеринг CIImage для конкретной прямой кишки в IOSurface


Я пытаюсь передать изображение в определенное место в IOSurface с помощью [CIContext render:toIOSurface:bounds:colorSpace:] указав аргумент bounds r в качестве прямоугольника назначения.

Согласно документации это должно работать, но CoreImage всегда визуализирует изображение в левом нижнем углу IOSurface.

Мне кажется, что это похоже на ошибку в CoreImage.

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

Есть предложения?

1 2

1 ответ:

То, что вы хотите сделать, в настоящее время невозможно с этим API (что является огромным обломком).

Однако вы можете обернуть IOSurface как текстуру (используя CGLTexImageIOSurface2D), а затем использовать contextWithCGLContext CIContext:..., а затем, наконец, использовать drawImage:inRect:fromRect: для этого.

Это огромный хак, но он работает (в основном): https://github.com/ccgus/FMMicroPaintPlus/blob/master/CIMicroPaint/FMIOSurfaceAccumulator.m