2017-01-17 1 views
1

Je rencontre des problèmes pour travailler avec la mémoire sous-jacente d'une image MPS. J'ai utilisé les méthodes getBytes et replace sur la variable membre texture de MPSImage pour lire et écrire les données sous-jacentes. Le problème est que je ne peux pas trouver de documentation sur la façon dont la mémoire est interprétée comme une image (c'est-à-dire, comment les lignes, les colonnes et les canaux sont disposés). Une partie de ce qui complique le problème est que, quel que soit le nombre de canaux de caractéristiques, les données sont stockées sous la forme d'une pile de tranches de texture RGBA, certains canaux restant éventuellement inutilisés. Par exemple, avec 3 canaux de caractéristiques, il y aura une tranche de texture RGBA, et l'espace d'un canal restera inutilisé.Apple Metal MPSImage Disposition de la mémoire

Le problème est, comment les données MPSImage sont-elles réellement disposées dans la texture? Cela semble plus compliqué que je ne le pensais à l'origine. Après beaucoup d'expérimentation, il semble que les données sont organisées différemment selon que le nombre de canaux est < 4 ou> 4. Mais je n'arrive toujours pas à le trouver.

Quelqu'un peut-il m'expliquer la disposition des données de MPSImage?

Répondre

0

Les quatre premiers canaux de caractéristique sont codés comme ils le seraient pour une texture RGBA standard. Le canal de caractéristique 0 est dans la position "R", le canal de caractéristique 1 est dans la position "G" et ainsi de suite.

Les quatre canaux de fonction suivants sont présents en tant que tranche suivante dans un tableau texture2d_array. Si vous avez une image 100x100 avec 20 canaux de caractéristiques, celle-ci sera codée comme un tableau de texture 100x100 avec (20/4 =) 5 tranches dans le tableau. Pour compliquer les choses, vous pouvez avoir des matrices MPSImage avec plusieurs images, chacune avec plus de 4 canaux de caractéristiques. Ceci est souvent appelé lot. La deuxième image est trouvée dans le tableau de texture immédiatement après la première image. Si nous avons plusieurs images 100x100x20 dans le MPSImage, alors le second commence à la tranche 5, le troisième à la tranche 10 et ainsi de suite.