2010-11-14 27 views
14

Tous les Macbook Pro 2010 sont livrés avec deux cartes graphiques - une Intel HD intégrée basse performance et une NVIDIA discrète haute performance - et les commutent à la volée en fonction des besoins des applications en cours d'exécution.Comment désactiver Macbook Pro de passer à une carte graphique haute performance dans Cocoa?

J'ai une application Cocoa simple qui consiste simplement en un élément de barre de menu avec un NSTextField dedans. Tout ce que je fais est de mettre à jour le champ de texte avec un NSAttributedString de temps en temps. Le problème est que mon application bascule mon Macbook Pro pour utiliser la carte NVIDIA haute performance (j'ai utilisé l'outil gfxCardStatus pour le confirmer).

Qu'est-ce qui pourrait avoir besoin de la carte haute performance? Y at-il une liste connue des raisons pour lesquelles les applications nécessitent une carte graphique haute performance? Y at-il un moyen de forcer l'ordinateur à utiliser la carte graphique discrète?

Répondre

17

Il existe un bon article sur la commutation GPU dans les nouveaux MacBook Pros au Ars Technica. je remarquai que OS X passe au GPU dédié si vous

  • démarrer une application qui relie contre OpenGL
  • Se connecter un second écran

Le code de gfxCardStatus est open source. Et il semble que la partie pertinente se trouve dans switcher.m. Vous pouvez regarder de plus près here.

+1

Merci pour la prise. :) Il est en effet open source, et je vous encourage à le regarder si vous le désirez - cependant, je ne recommanderais pas d'ajouter le code de commutation dans d'autres applications. Une application essayant de contrôler quel GPU est actif est suffisante. J'ai réussi à corrompre une de mes extensions de noyau en exécutant 3 copies de celui-ci simultanément et en essayant de basculer avec chacune d'elles juste après l'autre, juste à des fins de test - mauvaise idée. – codykrieger

+8

En outre, tout ce qui utilise CALayers déclenchera un basculement vers le GPU discret. – codykrieger

+1

C'était Cody! Dès que j'ai mis wantLayer sur l'un des contrôles à NO, il a cessé de passer à un GPU discret. Vous devriez le poser comme une réponse. –