Прежде всего, MTLTexture
происходит от низкоуровневого графического API. MTLTexture
относится к «образу», который находится в памяти, доступной для графического процессора (не обязательно для самого графического процессора) Затем вы можете написать программу, которая использует Metal, в частности, визуализировать (MTLRenderPipelineState
) или вычислять (MTLComputePipelineState
) конвейерные состояния, которые содержат шейдеры (программы, работающие на GPU) для чтения текстур, выборки их, записи в них и использования их как вложения (выводить на них результаты рендеринга). Текстуры также могут быть скопированы в буферы (MTLBuffer
) и другие текстуры, если вы хотите прочитать данные текстуры на ЦП. Но MTLTexture
в основном предназначен для использования графическим процессором, а не процессором. Кроме того, MTLTexture
не ограничивается тем, чтобы быть 2D, это также может быть текстура куба или даже 3D текстура.
CGImage
, с другой стороны, происходит от высокоуровневого API (Core Graphics или Quartz 2D), предназначенного для использования в 2D. Вам не нужны шейдеры или конвейеры GPU для создания или изменения CGImage
s, и есть много функций для работы с этими изображениями «из коробки».
Я бы сказал, что если у вас есть 3D-видеоигра, вы можете проверить Metal, но это низкоуровневый API, и настройка Metal - это гораздо более сложный процесс, чем, например, установка OpenGL. Вы не можете использовать Core Graphics для 3D-игр как есть. Если Metal кажется слишком сложным, вы можете воспользоваться высокоуровневыми API от Apple, такими как SceneKit, которые также предназначены для разработки игр.
Я не могу много сказать о разработке 2D-игр, но вы определенно можете использовать Metal для этого, это может быть немного "излишним".
В заключение вам нужно найти баланс между сложностью и контролем и выбрать то, что вам больше подходит.