11
votes

Pourquoi OS X n'a-t-il pas les mêmes problèmes vacillants que Windows fait?

Je lisais la dernière publication du blog de Larry Osterman sur Débogage d'un problème de clignotant dans le contrôle de Windows Vista / 7 Volume , et j'ai soudainement compris que je ne me souviens plus jamais de voir une demande de scintillement sur mon ordinateur portable OS X. Même des applications qui semblent être mal écrites, évitez le problème de scintillement de mon expérience. Sans cela se transformant en un débat d'Apple vs Windows (s'il vous plaît), Pourquoi les applications OS X ne semblent pas avoir le même problème scintillant ?

J'ai du mal à croire que les développeurs d'Apple sont tout simplement incroyables lors de la programmation des Guis sans scintillement, tandis que les programmeurs Windows sucent, alors quelle est la raison? L'API OS X exige-t-elle que toutes les GIV implémentent une double tampon? Bien que certaines applications aient le comportement légèrement tamponneux de redimensionnement à double tampon, beaucoup, et ils évitent toujours de scintiller. Le flux REJUSTEM OS X est-il en quelque sorte fondamentalement différent de Windows, en évitant entièrement le problème wm_erasebkgrnd entièrement? Ou y a-t-il une autre possibilité que je ne voie pas?

mise à jour: merci pour vos réponses. J'aimerais pouvoir sélectionner les réponses de Ken et CB160, car elles sont toutes deux utiles.


0 commentaires

3 Réponses :


17
votes

Mac OS X a Windows double tamponnée .

Vous n'avez rien à faire pour que cela se produise. C'est dans les coulisses.

Vous (presque toujours) ne dessinez pas explicitement à une fenêtre en cacao lorsque quelque chose change, vous invalendez une région de la fenêtre. Le cadre descendra plus tard la hiérarchie des vues et attirera les régions sales de la fenêtre dans un tampon secondaire. Puis il envoie les tampons.

Vous pouvez éventuellement faire des promesses qui permettent au cadre de prendre des raccourcis lors de la redécession, mais ils sont tous opt-in. Seules les vues avertissantes sont affectées.

Si votre sous-classe de NSView implémente la méthode ISOPAQUE pour revenir oui, le cadre ne fera jamais rien de côté derrière votre vue ou ne dessine aucune des opinions sous elle.

Mise en œuvre préserveScontentDuringLiverSisez sur pour renvoyer oui vous donne des responsabilités supplémentaires, mais peut améliorer les performances lors du redimensionnement de la fenêtre.

10.6 Ajout d'une autre nouvelle nouvelle API de ce type, LayercontentsRrawpolicy et LayercontentsPlacement .

Enfin, le dessin personnalisé est moins commun que sur Windows. La majorité des vues que vous voyez sont fournies et non sous-classées. Fourni sur le cadre moyen d'optimiser-by-pomme.


0 commentaires

2
votes

Yup, tout est double tamponnée automatiquement. Bien sûr, si vous courez code hérité de Mac OS 9, ou code porté de Windoze, qui signifie que vous êtes Probablement triplé tampon sans le savoir. Hé, les cycles sont bon marché!


0 commentaires

11
votes

Les deux l'utilisation de Windows Vista / 7 et Mac OS X moteurs compositing pour dessiner bitmaps tramée sur l'écran. Ces moteurs compositing sont responsables du traitement de sortie de toutes les fenêtres et le dessin de l'image de l'écran final. Cette approche est compositing comment OSX est capable d'utiliser l'effet genie lors de la réduction au quai et comment aéro dessine les frontières translucides. Ils ont également scintillent comme si empêchent le bitmap pour remplir une zone particulière de l'écran ne sont pas disponibles, il utilisera l'image qu'elle a déjà plutôt que de dessiner une région vide.

Mac OS X a un moteur compositing depuis son expédition. À l'époque, beaucoup de gens si c'était un fou appraoch que toutes les cartes vidéo d'expédition au moment wer optimisé pour dessiner bitmaps (par exemple, les boutons des fenêtres et des frontières) et des images non composited. Dans les versions ultérieures de Mac OS X, le compositing a été poussé hors du GPU (en Quartz Extreme) et ainsi se charge importante au large de la CPU et a plus d'effets possibles.

Parce que le compositer Windows a été ajouté que dans Windows Vista et seulement quand il y avait un GPU disponible et vous avez eu la bonne version du système d'exploitation, il est pas aussi pervassive que le Compositer Quartz dans OSX. Parce que le compositer est pas toujours utilisé dans Windows, vacillante se produira quand une région est occulté et l'application responsable de dessin n'est pas en mesure de redessiner la région assez qucikly.


0 commentaires