2010-11-28 19 views
3

Je me demande quel est le moyen le plus rapide de rendre un pixel-raster de la mémoire sur l'écran des périphériques iOS, pour atteindre le taux de framerate le plus élevé possible. Je peux comprendre deux approches:Le moyen le plus rapide d'afficher une pixellisation sur les périphériques iOS

  1. Créer un CGImage avec CGImageCreate, dessiner que sur l'écran avec CGContextDrawImage dans la méthode drawRect puis supprimez le CGImage objet
  2. Utiliser OpenGL en mode orthographiques, copiez les pixels dans un texture avec glTexImage2D et rendre un quad avec cette texture

Probablement la deuxième approche sera plus rapide que la première. Mais sera-t-il significatif plus rapidement ou juste un peu? Et y a-t-il une troisième façon de le faire, qui sera plus rapide que les deux premiers que j'ai mentionnés?

+0

Alors, comment appeler la méthode glTexImage2D pour chaque image? –

Répondre

0

Si votre image est fréquemment mise à jour, la création d'une texture à chaque image (ou presque à chaque image) sera un véritable succès. Vous pourriez avoir plus de chance en utilisant un CALayer et les paramètres de sa propriété contents à un CGImageRef que vous souhaitez utiliser. Le résultat sera similaire à l'utilisation de CGContextDrawImage() comme vous l'avez décrit, mais offrira plus de flexibilité au Core Animation, ce qui, espérons-le, le rendra plus rapide.

+0

Cela semble intéressant. La définition de la propriété de contenu sur un CGImageRef affichera-t-elle immédiatement l'image ou dois-je appeler une méthode de redessin? –

+0

Je pense que vous devrez appeler '- [CALayer setNeedsDisplay]' après avoir modifié le contenu afin de déclencher un redraw. Même s'il n'est pas strictement nécessaire, il ne sera mis à jour que si nécessaire, donc il ne devrait pas y avoir de coup de performance associé. –