2016-03-31 3 views
1

erstellen Wenn IDirect3D9::CreateDevice mit dem BehaviorFlags D3DCREATE_ADAPTERGROUP_DEVICE, um einen Vollbild-multihead device (mit 2 oder mehr Monitoren angeschlossen ist) zu schaffen, den Aufruf der Funktion gibt D3DERR_INVALIDCALL, wenn die Ausführung der Anwendung auf Windows 10 (Build 1511 oder Build 10240).D3D9 Create() nicht auf 10 Fenster, wenn eine Mehrkopfvorrichtung

Derselbe Code funktioniert gut unter Windows 7 (auf einer Vielzahl von verschiedenen Maschinen) und auch unter Windows 8.1 (mit den neuesten Updates). Auch das Erstellen einzelner D3D9-Geräte (Vollbild) für jeden angeschlossenen Monitor an den Grafikadapter funktioniert problemlos unter Windows 10.

D3D9Ex zeigt übrigens genau das gleiche Verhalten. Kann mir jemand auf ein funktionierendes D3D9-Multihead-Beispiel verweisen, das unter Windows 10 funktioniert? Vielen Dank!

Antwort

0

Ich beobachtete das gleiche Verhalten mit "CreateDevice". Aber wenn Sie "CreateDeviceEx" verwenden, funktioniert es gut ... fast :-(.

Sie können das Gerät jetzt erstellen und verwenden, aber unter bestimmten Umständen (vor allem, wenn Sie die gleichen Auflösungen wie die verwenden Desktop hat bereits) Sie werden nichts sehen und "Present" wird ständig "S_PRESENT_MODE_CHANGED" zurückgeben. Aber wenn Sie jetzt den zweiten Monitor auf eine andere Auflösung über ResetEx Ende schalten, dann wechseln Sie zurück zur Desktopauflösung - voila es funktioniert. Ich habe das eingeschaltet ein Schlüssel, den ich nach der Initialisierung drücken kann.?

 const int idx = 1; 
     int OldWidth = D3DPresPar[idx].BackBufferWidth; 
     int OldHeight = D3DPresPar[idx].BackBufferHeight; 
     D3DPresPar[idx].BackBufferWidth = 1280; 
     D3DPresPar[idx].BackBufferHeight = 720; 
     D3DDispMode[idx].Width = 1280; 
     D3DDispMode[idx].Height = 720; 
     FailCheck(pD3DDevice->ResetEx(D3DPresPar, D3DDispMode), "ResetEX"); 
     D3DPresPar[idx].BackBufferWidth = OldWidth; 
     D3DPresPar[idx].BackBufferHeight = OldHeight; 
     D3DDispMode[idx].Width = OldWidth; 
     D3DDispMode[idx].Height = OldHeight; 
     FailCheck(pD3DDevice->ResetEx(D3DPresPar, D3DDispMode), "ResetEX"); 

Und nach dem drücken der Taste es plötzlich funktioniert Sonderbare, eh bestätigte ich dieses Verhalten auf mehreren Rechen rs mit nvidia, amd und Intel Grafikkarten. Der Fehler scheint also auf der Microsoft-Seite zu liegen.

Fazit: Theoretisch sollte es funktionieren, aber es gibt einige Annyoing Bug in Windows 10 Multihead-Initialisierung. Mit ein paar seltsamen Tricks kannst du erreichen, was du willst, aber diese Tricks sind einfach zu komisch, um sie in der Produktion zu verwenden.

Verwandte Themen