J'ai une application D3D11 et je veux ajouter un support plein écran approprié. Maintenant, je peux laisser DXGI basculer ma fenêtre en plein écran pour moi, et j'ai l'impression que DXGI s'occupera de tout ce qui est nécessaire pour faire basculer la chaîne de swap avant et le backbuffer au lieu de les blitting.
Cependant, laisser DXGI effectuer le swich semble peu fiable avec une configuration multi-écrans - les écrans secondaires restent entièrement noirs après le changement la plupart du temps, sans raison ni motif apparent.
Il peut s'écouler plusieurs fois avant et en arrière avant que la fenêtre plein écran et le reste du bureau ne s'affichent sur les autres écrans.
Apparemment, je ne suis pas seul avec cela, Battlefield 3 et WoW semblent avoir des problèmes similaires pour beaucoup de gens.
Maintenant, la vraie question: je suppose que même ces sociétés de développement de jeux AAA ne peuvent pas faire fonctionner cela, mon plus grand espoir serait de faire en quelque sorte passer moi-même en plein écran.
Y a-t-il quelque chose que je puisse faire pour faire passer ma fenêtre / ma plateforme d'échange en mode plein écran approprié, avec retournement de tampon?
Réponses:
À ma connaissance, la seule chose qui fonctionne est:
au début de votre candidature et:
avant de quitter. Pour les transitions, procédez comme d'habitude. J'ai essayé
InvalidateRect(NULL, NULL, true)
juste après le passage en plein écran en vain. J'espère que cela t'aides.la source
Vous n'êtes en effet pas le seul à faire face à ce problème . Première chose à vérifier: assurez-vous que vous utilisez les derniers pilotes / bêta / haut de gamme pour la carte vidéo que vous utilisez.
Maintenant, je dirais qu'il n'y a qu'une petite chance que vous puissiez faire fonctionner cela mieux que l'implémentation DXGI automatique. Ce type de problème dépend fortement du fournisseur de l'adaptateur, de la version du pilote et de la configuration du moniteur. Donc, en le fixant sur une machine, vous risquez de le casser sur plus.
Je déconseille de retourner à l'âge sombre de DirectX 9 où vous deviez tout faire à la main. Une meilleure idée serait d'essayer de corriger la commutation automatique. Quelques pistes à suivre:
Lisez attentivement la documentation (clairsemée) .
Si vous ne le faites pas déjà, essayez de répondre à l'
WM_SIZE
événement que vous recevez lors du passage de / à plein écran, comme décrit ici . Si vous le faites, assurez-vous que vous libérez correctement toutes les références au tampon arrière avant d'appelerResizeBuffers
, comme décrit ici . Ne pas le faire pourrait entraîner ce genre de demi-problèmes étranges.Essayez de démarrer directement en plein écran et de créer votre chaîne de swap avec l'un des modes d'affichage énumérés . Si cela fonctionne tout le temps, cela peut signifier que vous n'utilisez pas l'un des modes d'affichage énumérés lors de la manipulation
WM_SIZE
(ou pas entièrement, des éléments tels que le taux de rafraîchissement peuvent être importants).Essayez de contourner avec l'effet de swap et le nombre de tampons de votre description de chaîne de swap . Vous devriez probablement utiliser
DXGI_SWAP_EFFECT_SEQUENTIAL
et unBufferCount
> = 2. Peut-être que votre pilote ne prend pas en charge plus d'options "exotiques".la source