Performances d'affichage
olivier555
Membre
Bonjour,
Je réalise le portage sur Mac (Cocoa, Project Builder) d'une application PC développée sous Delphi qui génère des grandes images en 2D. La grande image est en fait découpée en imagettes (images mémoires), et suivant où en est le scroller, on affiche juste les bonnes imagettes. Le but de cette méthode est d'alléger la mémoire vidéo. Le fait de positionner ces imagettes à l'écran ne pose pas de problème, en revanche lorsqu'on resize la fenêtre, le programme doit redessiner les imagettes en fonction de la nouvelle taille de la fenêtre. Mon problème est que pour un code relativement similaire entre les deux plates-formes, l'affichage est fluide sur PC (Delphi) mais sur Mac c'est le fait de redessiner ces imagettes qui prend un temps fou (on resize, ca redessine toutes les imagettes, puis ca affiche). Du coup le resizage prend quelques secondes et surtout le scrolling est saccadé la 1ere fois qu'on passe sur une imagette (une fois qu'elle est calculée une première fois et qu'on ne resize pas à nouveau, on ne la redessine pas, par contre, il faut attendre que l'utilise scrolle sur elle pour que le programme la dessine une première fois). J'ai pourtant fait appel à des fonctions de dessin basique genre drawAtPoint, moveTo, lineTo, des NSBezierPath etc... Est-ce que les performances d'un Mac son inférieures pour ce genre de chose? Faut-il procéder différemment entre un PC et un Mac? Est-il préférable de dessiner directement la grande image directement dans la vue et pas sur les images mémoire? Merci par avance de me donner quelques pistes ou idées si vous en avez, et si vous n'avez pas tout compris, demandez moi des infos, c'est peut être pas très clair ce que j'ai écrit
Merci d'avance!!
olivier
Je réalise le portage sur Mac (Cocoa, Project Builder) d'une application PC développée sous Delphi qui génère des grandes images en 2D. La grande image est en fait découpée en imagettes (images mémoires), et suivant où en est le scroller, on affiche juste les bonnes imagettes. Le but de cette méthode est d'alléger la mémoire vidéo. Le fait de positionner ces imagettes à l'écran ne pose pas de problème, en revanche lorsqu'on resize la fenêtre, le programme doit redessiner les imagettes en fonction de la nouvelle taille de la fenêtre. Mon problème est que pour un code relativement similaire entre les deux plates-formes, l'affichage est fluide sur PC (Delphi) mais sur Mac c'est le fait de redessiner ces imagettes qui prend un temps fou (on resize, ca redessine toutes les imagettes, puis ca affiche). Du coup le resizage prend quelques secondes et surtout le scrolling est saccadé la 1ere fois qu'on passe sur une imagette (une fois qu'elle est calculée une première fois et qu'on ne resize pas à nouveau, on ne la redessine pas, par contre, il faut attendre que l'utilise scrolle sur elle pour que le programme la dessine une première fois). J'ai pourtant fait appel à des fonctions de dessin basique genre drawAtPoint, moveTo, lineTo, des NSBezierPath etc... Est-ce que les performances d'un Mac son inférieures pour ce genre de chose? Faut-il procéder différemment entre un PC et un Mac? Est-il préférable de dessiner directement la grande image directement dans la vue et pas sur les images mémoire? Merci par avance de me donner quelques pistes ou idées si vous en avez, et si vous n'avez pas tout compris, demandez moi des infos, c'est peut être pas très clair ce que j'ai écrit
Merci d'avance!!
olivier
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Donc dans ton cas, il faut calculer quelles imagettes doivent être redessinées en fonction l'argument placé, et ne redessiner que celles là .
En résumé, j'ai des trucs comme ça :
Je te donne juste en vrac un apercu de quelques lignes, mais il y en a beaucoup, beaucoup plus! (Pas mal de fonctions en fait affichage assez complexe)
Renaud-> Ce que tu dis est intéressant, mais je ne suis pas sur que ça me concerne dans le sens où dès qu'on resize la vue, il faut calculer l'intégralité des imagettes, et c'est ce calcul qui prend du temps. Le drawRect se contente d'afficher au bon endroit les bonnes imagettes. Et lorsque les imagettes sont précalculées, le drawRect réalise un scrolling très fluide.
http://developer.apple.com/documentation/performance/Conceptual/Drawing/index.html