Share via


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 mit Unterstützung für Multithread-Rendering und Ressourcenerstellung, Compute-Shader, Hardware tessellation, BC6H/BC7-Texturkomprimierung und HLSL-Shadermodell 5.0 mit dynamischer Shaderverknüpfung. Zusätzlich zur Direct3D 11-Komponente sind eine Reihe zusätzlicher Grafikkomponenten in der DirectX 11-Runtime enthalten: Direct3D 11, DXGI 1.1, 10level9-Featureebenen, 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 zugehörige Komponenten können auch unter Windows Vista mithilfe eines Systemupdates von Windows Update installiert werden. Für dieses Update sind Windows Vista und Service Pack 2 erforderlich. Endbenutzer mit aktivierten automatischen Updates haben daher wahrscheinlich bereits die Direct3D 11-Komponenten installiert, ebenso wie alle Windows 7-Benutzer.

Das D3D11InstallHelper-Beispiel wurde entwickelt, um die Erkennung der Direct3D 11-API zu vereinfachen, das Systemupdate automatisch auf dem Computer eines Endbenutzers zu installieren und dem Endbenutzer bei manueller Prozedur geeignete Nachrichten bereitzustellen, wenn ein neueres Service Pack erforderlich ist.

Hinweis

Der HLSL-Compiler (D3DCompile*.dll) und die D3DX-Hilfsprogrammbibliothek für Direct3D 11 (D3DX11*.dll) sind in keine Version des Windows-Betriebssystems integriert, können jedoch als Teil des Installationsprogramms einer Anwendung mithilfe der vorhandenen DirectSetup-Technologie bereitgestellt werden. Weitere Informationen zur Verwendung von DirectSetup finden Sie unter DirectX-Installation für Spieleentwickler. "Effects 11" ist als freigegebene Quellunterstützungsbibliothek unter Effects for Direct3D 11 Update verfügbar, und Sie können es direkt in eine App einschließen (ähnlich wie die DXUT-Hilfsprogrammbibliothek). Daher gibt es keine zusätzlichen Laufzeitumverteilungsanforderungen.

Direct3D 11.3

Windows 10 wird mit der integrierten Direct3D 11.3-API ausgeliefert. 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 werden mit der integrierten Direct3D 11.2-API ausgeliefert. 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 ausgeliefert. Teilweise Unterstützung für die Direct3D 11.1-API ist unter Windows 7 oder Windows Server 2008 R2 mit installiertem Plattformupdate 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 ggf. durchführen des Systemupdates über den Windows Update-Dienst. Die DLL zeigt keine Nachrichten oder Dialogfelder direkt an.

Die DLL besteht aus den folgenden Einstiegspunkten:

CheckDirect3D11Status

Diese Funktion führt die erforderlichen Überprüfungen durch und gibt die status von Direct3D 11 auf diesem Computer zurück. Für diese Funktion sind keine Administratorrechte erforderlich.

  • Eine status von D3D11IH_STATUS_INSTALLED gibt an, dass Direct3D 11 bereits auf dem Computer installiert ist und einsatzbereit ist.
  • D3D11IH_STATUS_NOT_SUPPORTED gibt an, dass diese Windows-Version Direct3D 11 oder verwandte Technologien nicht unterstützt.
  • Eine status von D3D11IH_STATUS_NEED_LATEST_SP gibt an, dass das neueste Windows Vista Service Pack vom Benutzer installiert werden soll.
  • Schließlich gibt ein status von D3D11IH_STATUS_REQUIRES_UPDATE an, dass direct3D 11 auf dem System nicht installiert ist, sondern dass das Systemupdate auf diese Version von Windows angewendet wird.

DoUpdateForDirect3D11

Diese Funktion verwendet die Windows Update-API, um ggf. das Systemupdate für die Installation von Direct3D 11 auf diesem System auszuführen. Beachten Sie, dass für diese Funktion netzwerkkonnektivität erforderlich ist, um Windows Update erfolgreich zu sein, sowie Administratorrechte. Es benötigt eine optionale Statusrückruffunktion und einen Benutzerkontextzeiger und gibt nach Abschluss einen endgültigen Ergebniscode zurück.

  • Das D3D11IH_RESULT_SUCCESS Ergebnis 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 es abgeschlossen ist. Beachten Sie, dass diese Funktion keinen Systemneustart plant.
  • D3D11IH_RESULT_NOT_SUPPORTED gibt an, dass das Systemupdate nicht für diese Version von Windows gilt. Dieses Ergebnis sollte nicht auftreten, wenn diese Funktion nur aufgerufen wird, nachdem eine D3D11IH_STATUS_REQUIRES_UPDATE status aus CheckDirect3D11Status abgerufen wurde.
  • Ein Ergebnis von D3D11IH_RESULT_UPDATE_NOT_FOUND gibt an, dass das Systemupdatepaket auf den Windows Update Servern nicht gefunden wurde.
  • Wenn beim Windows Update Download oder Installation ein Fehler auftritt, werden D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED oder D3D11IH_RESULT_UPDATE_INSTALL_FAILED als Ergebnis zurückgegeben.
  • Wenn ein Netzwerkkonnektivitätsfehler von der Windows Update-API zurückgegeben wird, wird das D3D11IH_RESULT_WU_SERVICE_ERROR Ergebnis zurückgegeben, was angibt, dass das Problem zeitweilig auftritt oder sich auf Netzwerkkonfigurations- oder Firewalleinstellungen bezieht. Der erneute Versuch der Updatefunktion kann erfolgreich sein.

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

D3D11Install.exe

Hinweis

D3D11Install.exe erfordert die Ausführung D3D11InstallHelper.dll.

D3D11Install.exe ist ein Tool für die Verwendung D3D11InstallHelper.dll als eigenständiges Installationsprogramm mit Benutzeroberflächen- und Endbenutzernachrichten 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 ohne Systemneustart durchgeführt wird, 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 für den Abschluss ein Systemneustart erforderlich ist. Für andere Fehlerbedingungen wird eine 2 zurückgegeben. Beachten Sie, dass diese ausführbare Datei Administratorrechte erfordert, um ausgeführt zu werden, und sie verfügt über ein Manifest, das die Erhöhung anfordert, wenn sie unter Windows Vista oder Windows 7 mit aktiviertem UAC ausgeführt wird. D3D11Install.exe kann als eigenständiges Tool für die Bereitstellung des Direct3D 11-Updates oder direkt von Installern verwendet werden.

Es unterstützt die folgenden Befehlszeilenoptionen:

/ruhig

Zeigt keine Nachrichten, Eingabeaufforderungen, Statusdialogfelder oder Fehlermeldungen an.

/Passive

Zeigt keine Meldungen, Eingabeaufforderungen oder Fehlermeldungen an, aber das Dialogfeld "Fortschritt" wird angezeigt.

/Minimal

Zeigt nur minimale Eingabeaufforderungen an.

/Y

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

/langid dezimal

Erzwingt, welcher Sprachbezeichnercode beim Anzeigen von Endbenutzernachrichten und Dialogfeldressourcen verwendet werden soll. Der Standardwert ist 1024, der die Standardspracheinstellung des Systems verwendet.

/Wu

Erzwingt die Verwendung von Windows Update anstelle des Systemstandards, der Windows Server Update Services (WSUS) sein kann, die auf einem verwalteten Server oder einer anderen nicht standardmäßigen Konfiguration ausgeführt wird.

Integration in Installationsprogramme

Um die technische Anforderung 3.1 für Spiele für Windows zu erfüllen, muss darauf geachtet werden, dass alle Endbenutzeraufforderungen frühzeitig im Installationsprozess angezeigt werden und dass es nicht mehrere UAC-bezogene Erhöhungsaufforderungen gibt. Es gibt drei grundlegende Optionen, um dieses Ziel zu erreichen:

  1. Die einfachste Methode besteht darin, die D3D11Install.exe mit dem Befehlszeilenschalter /minimal auszuführen. Dies sollte frühzeitig im Installer&Q A erfolgen, und die Installation sollte den Rückgabewert 1 verwenden, um anzugeben, dass ein Neustart am Ende der Installation geplant werden soll. Für die Ausführung des Programms sind Administratorrechte erforderlich.
  2. Verwenden Sie D3D11InstallHelper.dll direkt, um die Notwendigkeit des Updates zu erkennen, und stellen Sie alle Endbenutzernachrichten bereit, die für die status D3D11IH_STATUS_NEED_LATEST_SP erforderlich sind, wobei die Auflösung manuelle Benutzervorgänge erfordert. Das status Ergebnis von D3D11IH_STATUS_NOT_SUPPORTED kann zur Steuerung der Installation von Direct3D 11-bezogenen Ressourcen oder als Fehlerbedingung für Direct3D 11-only-Anwendungen verwendet werden, ist aber ansonsten nicht unbedingt eine nützliche Endbenutzermeldung. Für die status D3D11IH_STATUS_REQUIRES_UPDATE kann das Installationsprogramm direkt den DLL-Einstiegspunkt DoUpdateForDirect3D11 verwenden, um das Update durchzuführen und die verschiedenen resultierenden Endbenutzernachrichten zu verarbeiten. Beispiele für Standardmeldungen finden Sie, indem Sie das Dialogfeld D3D11Install.exe und Zeichenfolgentabellenressourcen untersuchen. Für den Updateeinstiegspunkt sind Administratorrechte erforderlich.
  3. Ein Hybridansatz besteht darin, status mit D3D11InstallHelper.dll zu überprüfen, und im Fall des status Codes D3D11IH_STATUS_NEED_LATEST_SP oder D3D11IH_STATUS_REQUIRES_UPDATE können D3D11Install.exe mit den Schaltern /minimal und /y ausgeführt werden, um das Dialogfeld anzuzeigen oder das Update nach Bedarf auszuführen. Diese Schritte sollten zu einem frühen Zeitpunkt des Installationsvorgangs ausgeführt werden, in der Regel unmittelbar nach der Q&A, und das Ausführen der ausführbaren Datei erfordert Administratorrechte.

Integration in InstallShield

Die Verarbeitung der Direct3D 11-Bereitstellung über InstallShields InstallScript ist problemlos mit dem D3D11InstallHelper-Beispiel möglich. 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 Supportdateien D3D11InstallHelper.dll und D3D11Install.exe hinzu.

    So fügen Sie die Dateien dem InstallShield-Projekt hinzu

    1. Klicken Sie auf der Registerkarte Installation Designer links unter Verhalten und Logik auf Supportdateien/Billboards.
    2. Klicken Sie auf Sprachunabhängig, klicken Sie dann mit der rechten Maustaste im 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 root\Samples\C++\Misc\Bin\x86
  3. Klicken Sie im InstallScript-Explorer auf die Datei InstallScript (normalerweise Setup.rul), die die DLL oder ausführbare Datei aufruft, die sich im Navigationsbereich links unter Verhalten und Logik befindet.

  4. Fügen Sie das folgende InstallScript 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 Prototyp NUMMER 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 Prototyp NUMMER D3D11InstallHelper.DoUpdateForDirect3D11IS(BOOL); ```

  1. Fügen Sie das folgende InstallScript-Element in die Datei in die OnFirstUIBefore-Funktion ein, kurz vor der Rückgabe 0:

    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;
    

Integration in ein MSI-Paket

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

  1. Fügen Sie der MSI-Eigenschaftstabelle relativePathToD11IH eine Eigenschaft hinzu, die den relativen Pfad zu D3D11Install.exe und D3D11InstallHelper.dll während der Installation enthält (dies ist in der Regel im Medienimage enthalten). Dadurch wird auch eine MSI-Eigenschaft D3D11IH_STATUS auf die status festgelegt, die 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 den Ergebniscode der erfolgreichen Neustartanforderung bei Bedarf zu verarbeiten.

Dieses Verfahren wird ausführlich in den folgenden Anweisungen beschrieben, in denen ein Prozess beschrieben wird, der mit einem MSI-Editor, z. B. dem Orca-Editor, durchgefü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 Zeile in der folgenden Tabelle der Binary-Tabelle im MSI-Paket hinzu.

    Name Daten
    D3D11IH Dateipfad zum DLL\D3D11InstallHelper.dll

     

    Hinweis

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

     

  3. Fügen Sie die Zeilen in der folgenden Tabelle 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 Action, Condition und Sequence 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 neu installierten Installation für alle Benutzer ausgeführt. 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 Zeile in der folgenden Tabelle der Tabelle Property im MSI-Paket hinzu.

    Eigenschaft Wert
    RelativePathToD3D11IH relativer Dateipfad, der D3D11Install.exe und D3D11InstallHelper.dll enthält

     

    Hinweis

    Der durch den Pfad angegebene Speicherort ist relativ zu dem im Installationspfad angegebenen Speicherort, 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 drucken Nachrichten an den Standardmäßigen Windows-Debugausgabemechanismus.

Firmeneinstellungen

Das D3D11InstallHelper-Beispiel ist für die Standardbereitstellung über Windows Update konzipiert. Dies ist das häufigste Szenario für die Installation eines Spiels durch Verbraucher. Viele Spieleentwickler, die für Herausgeber und in Entwicklungsstudios arbeiten, tun dies jedoch in Unternehmenseinstellungen, die über einen lokal verwalteten Server verfügen, der Softwareupdates mithilfe von Windows Server Update Services (WSUS)-Technologie bereitstellt. In dieser Umgebung hat der lokale IT-Administrator die Genehmigungssteuerung, welche Updates für Computer innerhalb des Unternehmensnetzwerks zur Verfügung gestellt werden, und die Standardversion 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 unternehmensgestü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 vollständig gesperrten Umgebung abzurufen.
  • Alternativ können KB-971512 manuell installiert werden.

Es ist sehr selten, dass der Computer eines Spielers Updates nur 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