2017-01-17 3 views
1

У меня возникли проблемы с работой с базой памяти MPSImage. Я использовал методы getBytes и replace в переменной члена MPSImage texture для чтения и записи базовых данных. Проблема в том, что я не могу найти документацию о том, как память интерпретируется как изображение (т. Е. Как строятся строки, столбцы и каналы). Часть того, что усложняет проблему, заключается в том, что независимо от количества каналов функций данные хранятся как стек фрагментов текстуры RGBA, причем некоторые каналы, возможно, остаются неиспользованными. Например, с 3 каналами функций будет один срез текстуры RGBA, и пространство в одном канале останется неиспользованным.План памяти Apple Metal MPSImage

Проблема в том, как данные MPSImage фактически расположены внутри текстуры? Это кажется более сложным, чем я предполагал раньше.

После долгих экспериментов кажется, что данные расположены по-разному в зависимости от того, является ли количество каналов функций < 4 или> 4. Но мне все еще трудно понять это.

Может ли кто-нибудь объяснить мне макет данных MPSImage?

ответ

0

Первые четыре канала функций кодируются так же, как и для стандартной текстуры RGBA. Канал функции 0 находится в положении «R», канал 1 функции находится в положении «G» и так далее.

Следующие четыре канала функций представлены как следующий фрагмент в текстуре2d_array. Если у вас есть изображение 100x100 с 20 каналами функций, это будет кодироваться как массив текстур 100x100 с (20/4 =) 5 срезами в массиве.

Чтобы усложнить ситуацию, вы можете иметь массивы MPSImage с несколькими изображениями в них, каждый из которых имеет более 4 каналов функций. Это часто называют дозированием. Второе изображение находится в массиве текстур сразу после первого изображения. Если у нас есть несколько изображений 100x100x20 в MPSImage, то второй начинается со среза 5, третий - на срезе 10 и так далее.

Смежные вопросы