Direct3D 11-Bereitstellung für Spieleentwickler

In diesem Artikel wird beschrieben, wie Sie die Direct3D 11-Komponenten bei Bedarf auf einem System bereitstellen.

Übersicht

Die Direct3D 11-API erweitert die vorhandene Direct3D 10.1-API um Unterstützung für Multithreadrendering und Ressourcenerstellung, Compute-Shader, Hardwaretessellation, BC6H/BC7-Texturkomprimierung und HLSL-Shadermodell 5.0 mit dynamischer Shaderverknüpfung. Zusätzlich zur Direct3D 11-Komponente sind einige zusätzliche Grafikkomponenten in der DirectX 11-Runtime enthalten: Direct3D 11, DXGI 1.1, 10level9, WARP10-Softwarerenderinggerät, Direct2D, DirectWrite und ein aktualisiertes Direct3D 10.1 mit Unterstützung für 10level9 und WARP10. Informationen zu diesen und anderen Windows-Grafikkomponenten finden Sie unter Grafik-APIs in Windows.

Alle diese neuen Grafikkomponenten sind in die Betriebssysteme Windows 7 und Windows Server 2008 R2 integriert. Die Direct3D 11-API und die zugehörigen Komponenten können auch unter Windows Vista mithilfe eines Systemupdates von Windows installiert werden. Dieses Update erfordert Windows Vista und Service Pack 2. Endbenutzer, für die automatische Updates aktiviert sind, verfügen daher wahrscheinlich bereits über installierte Direct3D 11-Komponenten, ebenso wie Windows 7 Benutzer.

Das Beispiel D3D11InstallHelper wurde entwickelt, um die Erkennung der Direct3D 11-API zu vereinfachen, das Systemupdate automatisch zu installieren, falls es auf den Computer eines Endbenutzers anwendbar ist, und um dem Endbenutzer bei manueller Prozedur entsprechende Nachrichten zur Verfügung zu stellen, wenn ein neueres Service Pack erforderlich ist.

Hinweis

Der HLSL-Compiler (D3DCompile.dll) und die D3DX-Hilfsprogrammbibliothek für * Direct3D 11 (D3DX11.dll) sind nicht in eine Version des Windows-Betriebssystems integriert, können aber als Teil des Installationsprogramms einer Anwendung mithilfe der vorhandenen DirectSetup-Technologie bereitgestellt werden. Weitere Informationen zur Verwendung von DirectSetup finden Sie unter * DirectX-Installationfür Spieleentwickler . "Effects 11" ist als Unterstützungsbibliothek für freigegebene Quellen unter Effects for Direct3D 11 Updateverfügbar, und Sie können sie direkt in eine App hinzufügen (ähnlich wie die DXUT-Hilfsprogrammbibliothek). Daher gibt es keine zusätzlichen Anforderungen an die Neuverteilung zur Laufzeit.

Direct3D 11.3

Windows 10 mit der integrierten Direct3D 11.3-API bereitgestellt. Eine Liste der neuen Features in der Direct3D 11.3-API finden Sie unter Direct3D 11.3-Features.

Direct3D 11.2

Windows 8.1 und Windows Server 2012 R2 mit der integrierten Direct3D 11.2-API. Eine Liste der neuen Features in der Direct3D 11.2-API finden Sie unter Direct3D 11.2-Features.

Direct3D 11.1

Windows 8 und Windows Server 2012 mit der integrierten Direct3D 11.1-API bereitgestellt. Teilunterstützung für die Direct3D 11.1-API ist unter Windows 7 oder Windows Server 2008 R2 mit installierten Plattformupdates für Windows 7 verfügbar. Weitere Informationen zum Plattformupdate für Windows 7 finden Sie unter Plattformupdate für Windows 7.

D3D11InstallHelper.dll

D3D11InstallHelper.dll hostet die Kernfunktionen zum Erkennen von Direct3D 11-Komponenten und ausführen des Systemupdates ggf. über den Windows Update-Dienst. Die DLL zeigt keine Meldungen oder Dialogfelder direkt an.

Die DLL besteht aus den folgenden Einstiegspunkten:

CheckDirect3D11Status

Diese Funktion führt die erforderlichen Überprüfungen durch und gibt den Status von Direct3D 11 auf diesem Computer zurück. Diese Funktion erfordert keine Administratorrechte.

  • Der Status D3D11IH STATUS INSTALLED gibt an, dass _ Direct3D 11 bereits auf dem Computer installiert und _ einsatzbereit ist.
  • D3D11IH STATUS NOT SUPPORTED gibt an, dass diese Version von _ _ Windows _ Direct3D 11 oder verwandte Technologien nicht unterstützt.
  • Der Status D3D11IH STATUS NEED LATEST SP gibt an, dass das neueste Windows Vista Service Pack vom _ _ Benutzer installiert werden _ _ soll.
  • Schließlich gibt der Status D3D11IH STATUS REQUIRES UPDATE an, dass auf dem System _ _ Direct3D 11 nicht installiert ist, das Systemupdate jedoch für diese Version von _ Windows.

DoUpdateForDirect3D11

Diese Funktion verwendet die Windows Update-API, um ggf. das Systemupdate für die Installation von Direct3D 11 auf diesem System durchzuführen. Beachten Sie, dass diese Funktion netzwerkkonnektivität erfordert, Windows Update erfolgreich ist, sowie Administratorrechte. Sie nimmt eine optionale Statusrückruffunktion und einen Benutzerkontextzeiger an und gibt nach Abschluss einen abschließenden Ergebniscode zurück.

  • Das Ergebnis D3D11IH RESULT SUCCESS gibt an, dass das Systemupdate angewendet wurde und einsatzbereit ist, während _ _ D3D11IH RESULT SUCCESS REBOOT angibt, dass das Systemupdate erfordert, dass der Computer neu gestartet wird, bevor er abgeschlossen _ _ _ ist. Beachten Sie, dass diese Funktion keinen Systemneustart geplant.
  • D3D11IH RESULT NOT SUPPORTED gibt an, dass das Systemupdate nicht _ für diese Version von _ _ Windows. Dieses Ergebnis sollte nicht auftreten, wenn diese Funktion erst aufgerufen wird, nachdem sie den Status D3D11IH _ STATUS REQUIRES UPDATE von _ _ CheckDirect3D11Status erhalten hat.
  • Das Ergebnis D3D11IH RESULT UPDATE NOT FOUND gibt an, dass das Systemupdatepaket auf den Windows _ _ Updateservern nicht gefunden _ _ wurde.
  • Wenn der Download oder die Installation des Windows-Updates fehlschlägt, wird D3D11IH RESULT UPDATE DOWNLOAD FAILED oder _ _ _ _ D3D11IH _ RESULT UPDATE INSTALL FAILED _ _ _ zurückgegeben.
  • Wenn von der Windows Update-API ein Netzwerkverbindungsfehler zurückgegeben wird, wird das Ergebnis D3D11IH RESULT WU SERVICE ERROR zurückgegeben, das angibt, dass das Problem zeitweilig oder im Zusammenhang mit der Netzwerkkonfiguration oder den Firewalleinstellungen stehen _ _ _ _ kann. Ein erneuter Versuch der Updatefunktion kann erfolgreich sein.

Weitere Informationen zur API für Windows Update finden Sie unter Windows Update-Agent-API.

D3D11Install.exe

Hinweis

D3D11Install.exe muss D3D11InstallHelper.dll ausgeführt werden.

D3D11Install.exe ist ein Tool zur Verwendung von D3D11InstallHelper.dll als eigenständiges Installationsprogramm mit Benutzeroberflächen- und Endbenutzermeldungen sowie als Beispiel für die ordnungsgemäße Verwendung der DLL. Der Prozess wird mit 0 beendet, wenn Direct3D 11 bereits installiert ist, wenn das Systemupdate erfolgreich angewendet wird, ohne dass ein Systemneustart erforderlich ist, wenn eine Service Pack-Installation erforderlich ist oder Wenn Direct3D 11 von diesem Computer nicht unterstützt wird. Eine 1 wird zurückgegeben, wenn das Systemupdate erfolgreich angewendet wurde und ein Systemneustart erforderlich ist. Eine 2 wird für andere Fehlerbedingungen zurückgegeben. Beachten Sie, dass diese ausführbare Datei Administratorrechte für die Ausführung erfordert und über ein Manifest verfügt, das eine Erhöhung anfordert, wenn sie unter Windows Vista oder Windows 7 mit aktivierter UAC ausgeführt wird. D3D11Install.exe kann als eigenständiges Tool zum Bereitstellen des Direct3D 11-Updates oder direkt von Installationsprogrammen verwendet werden.

Sie unterstützt die folgenden Befehlszeilenschalter:

/quiet

Zeigt keine Meldungen, Eingabeaufforderungen, Statusdialogfelder oder Fehlermeldungen an.

/passive

Zeigt keine Meldungen, Eingabeaufforderungen oder Fehlermeldungen an, zeigt jedoch das Statusdialogfeld an.

/minimal

Zeigt nur minimale Eingabeaufforderungen an.

/y

Unterdrückt die Aufforderung zur Bestätigung der Installation des Updates, falls erforderlich und anwendbar, für eine Standard- und minimale Installation.

/langid decimal

Erzwingt, welcher Sprachbezeichnercode beim Anzeigen von Endbenutzermeldungen und Dialogfeldressourcen verwendet werden soll. Der Standardwert ist 1024, bei dem die Standardspracheinstellung des Systems verwendet wird.

/wu

Erzwingt die Windows Update-Konfiguration anstelle der Standardeinstellung des Systems, die möglicherweise Windows Server Update Services (WSUS) auf einem verwalteten Server oder einer anderen nicht standardmäßigen Konfiguration ausgeführt wird.

Integration in Installationsprogramme

Zur Einhaltung von Support Easy Installation, Technical Requirement 3.1 for Games for Windows( Technische Anforderung 3.1für Spiele für Windows), müssen Sie darauf achten, dass alle Endbenutzeraufforderungen frühzeitig im Installationsprozess angezeigt werden, und um sicherzustellen, dass nicht mehrere UAC-bezogene Eingabeaufforderungen für rechte Rechte angezeigt werden. Es gibt drei grundlegende Optionen, um dieses Ziel zu erreichen:

  1. Die grundlegendste Methode ist das Ausführen der D3D11Install.exe mit dem Befehlszeilenschalter /minimal. Dies sollte frühzeitig im Installationsprogramm Q&A erfolgen, und die Installation sollte den Rückgabewert 1 verwenden, um anzugeben, dass am Ende der Installation ein Neustart geplant werden soll. Zum Ausführen des Programms sind Administratorrechte erforderlich.
  2. Verwenden D3D11InstallHelper.dll, um die Notwendigkeit des Updates zu erkennen, und geben Sie alle Endbenutzermeldungen an, die für den Status D3D11IH STATUS NEED LATEST SP erforderlich sind, wobei die Lösung manuelle Benutzervorgänge _ _ _ _ erfordert. Das Statusergebnis von D3D11IH STATUS NOT SUPPORTED kann verwendet werden, um die Installation von Direct3D 11-bezogenen Ressourcen zu steuern, oder als Fehlerbedingung für _ _ Nur-Direct3D 11-Anwendungen, aber es ist andernfalls nicht notwendigerweise eine nützliche _ Endbenutzermeldung. Für den Status D3D11IH STATUS REQUIRES UPDATE kann das Installationsprogramm direkt den _ _ DLL-Einstiegspunkt DoUpdateForDirect3D11 verwenden, um das Update durchzuführen und die verschiedenen resultierenden Endbenutzermeldungen zu _ verarbeiten. Beispiele für Standardmeldungen finden Sie durch Untersuchen der D3D11Install.exe Dialogfelds und der Zeichenfolgentabellenressourcen. Für den Updateeinstiegspunkt sind Administratorrechte erforderlich.
  3. Ein hybrider Ansatz besteht in der Überprüfung des Status mit D3D11InstallHelper.dll. Im Fall des Statuscodes D3D11IH _ STATUS NEED LATEST SP or _ _ _ D3D11IH STATUS REQUIRES UPDATE kann D3D11Install.exe mit den Schaltern /minimal und _ _ _ /y ausgeführt werden, um das Dialogfeld anzuzeigen oder das Update bei Bedarf auszuführen. Diese Schritte sollten zu einem frühen Beginn des Installationsprozesses ausgeführt werden, in der Regel unmittelbar nach dem Q&A, und die Ausführung der ausführbaren Datei erfordert Administratorrechte.

Integration in InstallShield

Die Direct3D 11-Bereitstellung über InstallShield InstallScript kann problemlos mithilfe des D3D11InstallHelper-Beispiels durchgeführt werden. Für die Integration in InstallShield mit InstallScript sind die folgenden Schritte erforderlich (mithilfe von Methode 3, die im vorherigen Abschnitt beschrieben wurde):

  1. Öffnen Sie ein InstallScript-Projekt im InstallShield-Editor.

  2. Fügen Sie dem Projekt unter Unterstützungsdateien D3D11InstallHelper.dll und D3D11Install.exe hinzu.

    So fügen Sie die Dateien dem InstallShield-Project

    1. Klicken Sie auf der Registerkarte Installations-Designer im Navigationsbereich auf der linken Seite unter Verhalten und Logik auf Unterstützungsdateien/-gänge.
    2. Klicken Sie auf Sprachunabhängig, klicken Sie dann mit der rechten Maustaste in das Fenster Dateien, und wählen Sie Dateien einfügen aus. Navigieren Sie, um D3D11InstallHelper.dll und D3D11Install.exe hinzuzufügen. Der Standardspeicherort für diese Dateien ist: \ SDK-Stammbeispiele \ C++ \ Misc \ Bin \ x86
  3. Klicken Sie im InstallScript-Explorer im Navigationsbereich auf der linken Seite unter Verhalten und Logik auf die InstallScript-Datei (normalerweise Setup.rul), die die DLL oder ausführbare Datei aufruft.

  4. Fügen Sie den folgenden InstallScript-Code in die Datei am oberen Rand ein:

#define D3D11IH_STATUS_INSTALLED 0 #define D3D11IH_STATUS_NOT_SUPPORTED 1 #define D3D11IH_STATUS_REQUIRES_UPDATE 2 #define D3D11IH_STATUS_NEED_LATEST_SP 3 #define D3D11IH_STATUS_ERROR -1 prototype NUMBER D3D11InstallHelper.CheckDirect3D11StatusIS();

#define D3D11IH_RESULT_SUCCESS 0 #define D3D11IH_RESULT_SUCCESS_REBOOT 1 #define D3D11IH_RESULT_NOT_SUPPORTED 2 #define D3D11IH_RESULT_UPDATE_NOT_FOUND 3 #define D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED 4 #define D3D11IH_RESULT_UPDATE_INSTALL_FAILED 5 #define D3D11IH_RESULT_WU_SERVICE_ERROR 6 #define D3D11IH_RESULT_ERROR -1 prototype NUMBER D3D11InstallHelper.DoUpdateForDirect3D11IS(BOOL); ```

  1. Fügen Sie den folgenden InstallScript-Code in die Datei in der OnFirstUIBefore-Funktion direkt vor der Rückgabe 0 ein:

    Dlg_D3D11:
        UseDLL( SUPPORTDIR ^ "D3D11InstallHelper.DLL" );
        nResult = D3D11InstallHelper.CheckDirect3D11StatusIS();   
        UnUseDLL( SUPPORTDIR ^ "D3D11InstallHelper.DLL" );
    
        if ( nResult = D3D11IH_STATUS_REQUIRES_UPDATE
             || nResult = D3D11IH_STATUS_NEED_LATEST_SP) then
            nResult = LaunchAppAndWait(
    SUPPORTDIR^"D3D11Install.exe",
    "/minimal /y", WAIT);
            if ( nResult < 0 ) then
                MessageBox("Unable to launch D3D11Install.exe",
     SEVERE);
            elseif ( nResult == 1 ) then
                BATCH_INSTALL = 1;
            endif;          
        endif;
    

Integrieren in ein MSI-Paket

Im Folgenden finden Sie eine beschreibung der schritte, die erforderlich sind, um die Direct3D 11-Bereitstellung mit benutzerdefinierten MSI-Aktionen zu integrieren (mithilfe der Methode 3, die weiter oben in diesem Thema beschrieben wird):

  1. Fügen Sie der MSI-Eigenschaftentabelle eine Eigenschaft namens RelativePathToD3D11IH hinzu, die den relativen Pfad zu D3D11Install.exe und D3D11InstallHelper.dll während der Installation enthält (dies befindet sich normalerweise im Medienimage). Dadurch wird auch die MSI-Eigenschaft D3D11IH STATUS auf den Status festgelegt, _ der von CheckDirect3D11Status zurückgegeben wird (eine Zeichenfolgeneigenschaft, die dem Enumerationssymbol oder "ERROR" entspricht).
  2. Rufen Sie nach der CostFinalize-Aktion die D3D11InstallHelper.dll Funktion SetD3D11InstallMSIProperties als sofortige benutzerdefinierte Aktion auf, um die entsprechenden MSI-Eigenschaften für die anderen benutzerdefinierten Aktionen festzulegen.
  3. Lösen Sie nach der Installation eine verzögerte benutzerdefinierte Aktion nach der InstallFiles-Aktion aus, die die D3D11InstallHelper.dll Funktion DoD3D11InstallUsingMSI aufruft. Die benutzerdefinierte Aktion muss das Flag msidbCustomActionTypeNoImpersonate festlegen, um in einem Kontext mit erhöhten Rechten ausgeführt zu werden.
  4. Rufen Sie nach der InstallFinalize-Aktion die D3D11InstallHelper.dll Funktion FinishD3D11InstallUsingMSI als sofortige benutzerdefinierte Aktion auf, um bei Bedarf den Ergebniscode der erfolgreichen Neustartanforderung zu verarbeiten.

Dieses Verfahren wird in den folgenden Anweisungen ausführlich beschrieben, die einen Prozess beschreiben, der mit einem MSI-Editor wie dem Orca-Editorausgeführt werden kann. Einige MSI-Editoren verfügen über Assistenten, die einige dieser Konfigurationsschritte vereinfachen.

So konfigurieren Sie ein MSI-Paket für die Integration in D3D11InstallHelper.dll

  1. Öffnen Sie das MSI-Paket in Orca.

  2. Fügen Sie die in der folgenden Tabelle gezeigte Zeile der Binärtabelle im MSI-Paket hinzu.

    Name Daten
    D3D11IH Dateipfad zur \ DLL-D3D11InstallHelper.dll

    Hinweis

    Diese Datei wird in das MSI-Paket eingebettet. Daher müssen Sie diesen Schritt jedes Mal durchführen, wenn Sie D3D11InstallHelper.dll neu kompilieren.

  3. Fügen Sie die in der folgenden Tabelle angezeigten Zeilen der Tabelle CustomAction im MSI-Paket hinzu.

    Aktion type Source Ziel
    Direct3D11SetProps msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH SetD3D11InstallMSIProperties
    Direct3D11DoInstall msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 D3D11IH DoD3D11InstallUsingMSI
    Direct3D11Finish msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH FinishD3D11InstallUsingMSI
  4. Fügen Sie die Werte für Aktion, Bedingung und Sequenz in der folgenden Tabelle der Tabelle InstallExecuteSequence im MSI-Paket hinzu.

    Aktion Bedingung Sequenz Notizen
    Direct3D11SetProps 1016 Die Sequenznummer platziert die Aktion kurz nach CostFinalize.
    Direct3D11DoInstall NICHT installiert 4004 Diese benutzerdefinierte Aktion wird nur während einer neuen Installation für alle Benutzer erfolgen. Die Sequenznummer platziert die Aktion nach InstallFiles und nach den Rollbacks.
    Direct3D11Finish 6615 Die Sequenznummer platziert die Aktion kurz nach InstallFinalize.
  5. Fügen Sie die in der folgenden Tabelle gezeigte Zeile der Property-Tabelle im MSI-Paket hinzu.

    Eigenschaft Wert
    RelativePathToD3D11IH Relativer Dateipfad mit D3D11Install.exe und D3D11InstallHelper.dll

    Hinweis

    Der durch den Pfad angegebene Speicherort ist relativ zum Speicherort, der vom Installationspfad angegeben wird, z. \ B. "redist".

  6. Speichern Sie das MSI-Paket. Ausführlichere Informationen zu MSI-Paketen und Windows Installer finden Sie unter Windows Installer.

Tipps zum Debuggen

Sowohl D3D11InstallHelper.dll als auch D3D11Install.exe können mit der Debugkonfiguration in Visual Studio erstellt werden, und diese Versionen geben Meldungen an den Standardausgabemechanismus Windows Debuggen aus.

Firmeneinstellungen

Das D3D11InstallHelper-Beispiel ist für die Standardbereitstellung über Windows Update konzipiert. Dies ist das gängigste Szenario für die Installation eines Spiels durch Consumer. Viele Spieleentwickler, die für Herausgeber und Entwicklungsstudios arbeiten, tun dies jedoch in Unternehmenseinstellungen, die über einen lokal verwalteten Server verfügen, der Softwareupdates mithilfe von WSUS-Technologie (Windows Server Update Services) bereitstellt. In dieser Art von Umgebung hat der lokale IT-Administrator die Genehmigungssteuerung, welche Updates für Computer im Unternehmensnetzwerk zur Verfügung gestellt werden, und die Standardverbraucherversion von Update KB 971644 ist nicht verfügbar.

Es gibt drei grundlegende Lösungen für die Bereitstellung von DirectX 11 in Unternehmens-/Unternehmenseinstellungen:

  • In einigen Konfigurationen ist es möglich, Windows Update direkt zu überprüfen, anstatt den lokal verwalteten WSUS-Server zu verwenden. Aus diesem Grund unterstützt D3D11InstallHelper den Befehlszeilenschalter /wu. Allerdings lassen nicht alle Unternehmensnetzwerke Verbindungen mit den öffentlichen Microsoft-Servern zu.
  • Der lokale IT-Administrator kann KB-971512 genehmigen, ein vom Unternehmen unterstütztes Update, das von WSUS bereitgestellt wird und die Direct3D 11-API enthält. Dies ist die einzige Option für einen Standardbenutzer, um das Direct3D 11-Update in einer umgebung abzurufen, die vollständig gesperrt ist.
  • Alternativ können KB-971512 manuell installiert werden.

Es ist sehr selten, dass der Computer eines Spielers nur Updates von einem lokal verwalteten WSUS-Server erhalten kann, und es sind nur Entwickler in großen Organisationen, die sich wahrscheinlich in solchen Umgebungen befinden.

Windows-Firewall für Spieleentwickler

Windows Games-Explorer für Spieleentwickler