Utiliser Metal pour charger des images?
Bonjour,
quelqu'un utilise-t-il Metal? Après quelques recherches, je comprends qu'on peut charger une image à l'aide de MTKTextureLoader. Est-ce que c'est plus rapide et plus efficace (Metal n'utilse que le GPU si j'ai bien compris) que Core Image. Si oui, est-ce facile de faire des “Fade" sur l'image chargée (j'imagine que oui) et aussi de la déplacer à l'écran?
Metal a l'air de demander un investissement bien plus important en programmation, est-ce que ça vaut le coup pour le chargement d'image?
Merci.
Anton
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Un chargement d'image c'est un chargement d'image. Il n'y a aucun rapport entre le GPU et les accès disques. Je ne pense pas que tu gagnes quoi que ce soit sur la vitesse de chargement. Regarde du coté des filtres CoreImage pour faire tes effets spéciaux.
Metal est un outil puissant mais très compliqué. Sans parler des problèmes d'incompatibilités avec les anciens macs et les anciens devices. A part ça je ne comprend pas trop ton besoin. Charger une image en mémoire, gérer un effet de fading et la déplacer sur l'écran.. de quelle taille l'image ?
Merci pour ta réponse.
Je m'intéresse ici au développement iOS. J'ai posé la question suite à la sortie de l'application Moog 15. Moog utilise des graphiques très riches dans lesquels il est permis de zoomer. On peut aussi se déplacer sur l'interface (qui déborde de la taille de l'écran) avec 2 doigts de manière très fluide. Pour cela ils ont utilisé Metal. En revanche la promo ne dit pas comment ils s'y sont pris. Utilisent-ils des images haute-définition ou ont-ils refait les éléments graphiques (boutons qui tournent, textures métalliques, etc) dans Metal.
Au final, de toute façon, la bitmap sera chargée en mémoire vidéo. Donc MTKTextureLoader n'est qu'un des nombreux moyens d'y parvenir.
Potentiellement, oui, puisque c'est là que le programmeur a le plus la main. Mais ça dépend du programmeur.
Non, ça n'a rien de facile. Parce qu'il faut initialiser une scène Metal, dessiner des rectangles, les remplir avec la texture et faire varier leur opacité. C'est faisable, je le fais en OpenGL tous les jours.
Mais comme probablement tu voudras t'interfacer avec UIKit, alors tu dessineras dans une CAMetalLayer, ce qui amène la question " Pourquoi ne pas utiliser Core Animation ou UIKit à la place " ?
Clairement pas. Si c'est pour faire un fondu et déplacer une image, alors j'utiliserais une simple UIImageView et les méthodes d'animations de UIView.
Il faut savoir que UIView travaille avec une CALayer sous le capot. La CALayer conserve le contenu de la vue sous forme de texture. C'est à dire que si tu déplaces une UIView ou une CALayer, le contenu de l'écran n'est pas recréé, c'est bien le rectangle de la vue qui est déplacé, et il est rempli par la texture en mémoire GPU, donc on n'est pas loin des performances d'OpenGL/Metal.
Pour le chargement, l'image est lue dans la mémoire CPU, puis décompressée, toujours en mémoire CPU. C'est ensuite l'image décompressée qui est envoyée au GPU. Certains jeux possèdent des shaders qui savent décompresser les images directement en mémoire GPU, mais ce sont des sphère inattaignables pour le commun des programmeurs.
Les deux sont possibles. Mais le plus simple est de dessiner les images en haute résolution avec un logiciel graphique et de les charger avant l'affichage. Ce n'est pas compliqué de faire tourner une image bitmap sur elle-même avant de l'afficher (boutons qui tournent).
Merci pour vos réponses. ça répond à mes questions