2009-07-23 9 views
1

Je développe sur l'iPhone et la majorité de notre jeu utilise OpenGL ES, mais il y a aussi des menus qui utilisent CGImage et Quartz pour être affichés. En OpenGL ES, je sais que peu importe la compression de l'image (JPG, PNG, etc.), les données stockées en mémoire sont une texture de 8 bits, sauf si j'utilise le PVRTC auquel cas je peux l'obtenir 2 ou 4 bits. Nous avons eu des problèmes de mémoire en raison de grandes CGImages, alors ma question est ... quelles sortes d'optimisations et de compressions sont utilisées par Quartz et CGImage? Je ne peux pas trouver les détails dans les docs d'Apple, alors que je veux vraiment savoir si cela ferait une différence de mettre une image de 256 couleurs, ou un JPG par rapport à un PNG, si les dimensions ont une puissance de 2, etc. La vitesse est sans importance, la mémoire est le goulot d'étranglement ici.Comment Quartz gère-t-il la compression de texture?

Merci.

Répondre

3

Le quartz n'est pas compressé. C'est pour composer rapidement et rendre le contenu précis de pixel. Une fois que vos images ont été dessinées dans un contexte, peu importe d'où elles viennent, elles prennent tout ce que le contexte prend par pixel pour tous les pixels qu'elles ont (généralement 4 octets par pixel dans un appareil si je me souviens bien). La grande chose qu'il fait est premultiplies l'alpha pour éviter le mélange. Maintenant, certaines vues sous la pression de la mémoire peuvent expulser leur contenu si elles ne sont pas affichées et les reconstituer si nécessaire. Dans ces cas, une CGImage d'une source compressée finit généralement par prendre moins de mémoire, mais je suppose que cela n'est pas pertinent dans le cas que vous avez décrit.

+0

Parfait, merci beaucoup pour l'information. – Eli