Ich habe eine D3D11-Anwendung und möchte die richtige Vollbild-Unterstützung hinzufügen. Jetzt kann ich DXGI mein Fenster für mich auf Vollbild umschalten lassen, und ich habe den Eindruck, dass DXGI sich um alles kümmert, was erforderlich ist, damit die Swap-Kette den vorderen und hinteren Puffer umdreht, anstatt sie zu blitzen.
Es scheint jedoch bei einem Multi-Monitor-Setup unzuverlässig zu sein, DXGI den Swich ausführen zu lassen - sekundäre Bildschirme bleiben nach dem Umschalten die meiste Zeit vollständig schwarz, ohne ersichtlichen Grund oder Muster.
Es kann einige Male dauern, bis das Vollbildfenster und der Rest des Desktops auf den anderen Bildschirmen angezeigt werden.
Anscheinend bin ich damit nicht allein, Battlefield 3 und WoW scheinen für viele Leute ähnliche Probleme zu haben.
Nun die eigentliche Frage: Ich denke, da selbst diese AAA-Spieleentwickler dies nicht zum Laufen bringen können, wäre meine größte Hoffnung, den Wechsel zum Vollbildmodus selbst durchzuführen.
Kann ich irgendetwas tun, um mein Fenster / meine Swapchain in den richtigen Vollbildmodus mit Pufferumkehr zu versetzen?
Antworten:
Meines Wissens funktioniert nur Folgendes:
zu Beginn Ihrer Bewerbung und:
vor dem Beenden. Gehen Sie für die Übergänge wie gewohnt vor. Ich habe es
InvalidateRect(NULL, NULL, true)
gleich nach dem Wechsel zum Vollbild ohne Erfolg versucht . Hoffe das hilft.quelle
Sie sind in der Tat nicht der einzige, der mit diesem Problem konfrontiert ist . Als erstes sollten Sie überprüfen, ob Sie die neuesten / beta / erstklassigen Treiber für die von Ihnen verwendete Grafikkarte verwenden.
Nun würde ich sagen, dass es nur eine geringe Chance gibt, dass dies besser funktioniert als die automatische DXGI-Implementierung. Diese Art von Problem hängt stark vom Adapterhersteller, der Treiberversion und der Monitorkonfiguration ab. Wenn Sie es also auf einer Maschine reparieren, können Sie es auf mehreren Maschinen beschädigen.
Ich rate davon ab, in das dunkle Zeitalter von DirectX 9 zurückzukehren, in dem Sie alles von Hand erledigen mussten. Eine bessere Idee wäre, die automatische Umschaltung zu reparieren. Einige Wege zu folgen:
Lesen Sie die (spärliche) Dokumentation sorgfältig durch.
Wenn Sie dies noch nicht tun, versuchen Sie, auf das
WM_SIZE
Ereignis zu reagieren, das Sie beim Wechsel von / zu Vollbild erhalten, wie hier beschrieben . Stellen Sie in diesem Fall sicher, dass Sie alle Verweise auf den Backpuffer ordnungsgemäß freigeben, bevor Sie aufrufenResizeBuffers
, wie dort beschrieben . Wenn Sie dies nicht tun, kann dies zu seltsamen Problemen führen.Versuchen Sie, direkt im Vollbildmodus zu starten und Ihre Swap-Kette mit einem der aufgezählten Anzeigemodi zu erstellen . Wenn dies die ganze Zeit funktioniert, kann dies bedeuten, dass Sie bei der Handhabung
WM_SIZE
keinen der aufgezählten Anzeigemodi verwenden (oder nicht vollständig, Dinge wie die Aktualisierungsrate können wichtig sein).Versuchen Sie, mit dem Swap-Effekt und der Pufferanzahl Ihrer Swap-Kettenbeschreibung herumzuspielen . Sie sollten wahrscheinlich verwenden
DXGI_SWAP_EFFECT_SEQUENTIAL
und aBufferCount
> = 2. Möglicherweise hat Ihr Treiber eine schlechte Unterstützung für "exotischere" Optionen.quelle