2010-09-11 5 views
0

Depuis des années maintenant j'ai maintenu un applet Tandy Color Computer Emulator sur ma page d'accueil. Avec l'achat d'un incroyable, j'ai décidé de faire un port. Ça n'a pas pris beaucoup de temps pour Android, mais je suis vraiment surpris de voir à quel point ça marche. Vous pouvez littéralement voir les pixels en train de peindre. Je sais qu'il existe d'autres émulateurs Android réussis, donc je dois faire quelque chose de mal.SurfaceView assez rapide pour l'émulation?

Mon approche consistait à utiliser un SurfaceView pour le rendu. Un thread séparé exécute un processeur virtuel 6809. Chaque fois que ce thread met à jour la mémoire vidéo émulée, il appelle SurfaceHolder.lockCanvas() avec un Rect décrivant la partie de l'écran nécessitant un repeint. Ensuite, il appelle les routines gfx avec le Canvas résultant ... c'est là que j'ai fait un repaint() dans AWT/Swing. Les routines gfx sont assez intelligentes pour juste restituer ce qui est dans le clipRect. Peut-être que je suis toujours coincé dans AWT mais je ne peux pas penser à aucun moyen de faire fonctionner cette chose à une vitesse acceptable. J'ai essayé de fusionner les appels gfx mais cela n'a pas fonctionné non plus. Des pensées?

Répondre

0

SurfaceView devrait être assez rapide. Toutes les routines de dessin sont assez intelligentes pour ne rien faire si elles sont en dehors de la zone du plan, mais vous pouvez réorganiser les appels à l'avance si vous le souhaitez. Il semble que vous ayez besoin de profiler votre application et de voir où vous passez trop de temps.

+0

Merci Romain. SurfaceView est assez rapide. J'appelle maintenant les routines draw avec un clip approprié tous les x cycles de processeurs (au lieu d'appeler les routines chaque fois que l'émulateur écrit dans la "mémoire vidéo"). Plus vite. –

Questions connexes