3 votes

C++ Directx 11 Cartes vidéo multiples

J'écris un programme en C++ en utilisant directx 11 pour mes graphiques. Mon ordinateur portable est équipé d'une carte graphique intel légère qui est utilisée pour prolonger l'autonomie de la batterie et qui est censée n'être utilisée que pour des graphiques "légers". J'ai également installé une autre carte vidéo beaucoup plus puissante.

Je me demande comment spécifier la carte vidéo à utiliser dans Directx. Y a-t-il un moyen, lorsque je crée le périphérique, de spécifier la carte à utiliser dans mon code ?

Merci

2voto

catflier Points 5637

Si votre carte est une combinaison intel/nvidia, vous avez deux options :

-La première chose à faire est de définir la carte nvidia comme périphérique préféré (dans le panneau de configuration nvidia, gérer les paramètres 3d, paramètres globaux/programmes, changer le processeur graphique préféré.

Une autre façon d'utiliser le code, est d'énumérer les adaptateurs avec DXGI, et d'essayer d'obtenir un périphérique avec un niveau de fonctionnalité restreint (CreateDevice échouera s'il n'est pas disponible, et la plupart des cartes Intel sont 10.1).

http://msdn.microsoft.com/en-us/library/Windows/desktop/bb174538(v=vs.85).aspx pour énumérer les adaptateurs.

Essayez ensuite de créer un périphérique avec D3D_FEATURE_LEVEL_11_0 uniquement pour chaque adaptateur, seul celui qui le supporte sera créé.

0voto

Erp Points 9

J'ai eu un problème similaire. Je n'ai pas encore essayé de mettre à jour les pilotes de ma carte graphique, mais je le ferai lorsque mon ordinateur sera de nouveau connecté à Internet.

Voici ce que j'ai trouvé et comment j'ai "résolu" (c'est-à-dire bricolé) mon problème :

Symptômes :

  1. Similaire à l'affiche ci-dessus.
  2. Je n'ai qu'une seule carte graphique NVDIA, qui prétend supporter DirectX 11.
  3. Quand je l'ai regardé dans DirectX Caps Viewer, il ne supportait que DirectX 9.3 et moins.

Solution :

  1. Itère en arrière dans le D3D_FEATURE_LEVEL, en appelant D3D11CreateDeviceAndSwapChain() à chaque fois.
  2. Une fois que D3D11CreateDeviceAndSwapChain() fonctionne, vous savez que vous avez trouvé le niveau de fonctionnalité maximal pris en charge par votre carte graphique sélectionnée.

Il y a peut-être un moyen plus joli de le faire, mais c'est là que résidait mon "problème". Il est évident qu'il serait préférable que ma carte prenne en charge le système DX11 complet, mais ce n'est pas un mauvais garde-fou au cas où un utilisateur aurait des problèmes similaires. Au moins, je peux identifier le problème de manière programmatique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X