MTLTexture против CGImageRef - PullRequest
       56

MTLTexture против CGImageRef

1 голос
/ 23 апреля 2019

В чем основная разница между MTLTexture против CGImageRef?Когда нам нужно использовать MTLTexture вместо CGImageRef (и наоборот)?

У меня есть приложение (скажем, видеоигра), которое рисует все на отдельной поверхности.это включает анимацию со скоростью 60 кадров в секунду (поэтому мне нужно перерисовывать поверхность каждые 16 мс).Я не знаю наиболее эффективный способ сделать мое приложение, используя Metal

1 Ответ

2 голосов
/ 23 апреля 2019

Прежде всего, 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 для этого, это может быть немного "излишним".

В заключение вам нужно найти баланс между сложностью и контролем и выбрать то, что вам больше подходит.

...