Freigeben über


Direct3D 11-Bereitstellung für Spieleentwickler

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

Überblick

Die Direct3D 11-API erweitert die vorhandene Direct3D 10.1-API mit Unterstützung für Multithread-Rendering und Ressourcenerstellung, Computeshader, Hardware-Tessellation, BC6H/BC7-Texturkomprimierung und HLSL-Shadermodell 5.0 mit dynamischer Shaderverknüpfung. Zusätzlich zur Direct3D 11-Komponente sind in der DirectX 11-Laufzeit eine Reihe zusätzlicher Grafikkomponenten 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 ist Windows Vista und Service Pack 2 erforderlich. Endbenutzer mit aktivierten automatischen Updates verfügen daher wahrscheinlich bereits über die Direct3D 11-Komponenten, wie alle Windows 7-Benutzer.

Das D3D11InstallHelper-Beispiel wurde entwickelt, um die Erkennung der Direct3D 11-API zu vereinfachen, das Systemupdate automatisch zu installieren, falls auf den Computer eines Endbenutzers anwendbar, und um dem Endbenutzer entsprechende Meldungen im manuellen Verfahren bereitzustellen, wenn ein neueres Service Pack erforderlich ist.

Anmerkung

Der HLSL-Compiler (D3DCompile*.dll) und die D3DX-Hilfsbibliothek 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-Installation für Spieleentwickler. "Effects 11" ist als bibliothek für die unterstützung freigegebene Quelle unter Effects for Direct3D 11 Updateverfügbar, und Sie können sie direkt in eine App einschließen (ähnlich wie die DXUT-Hilfsbibliothek). 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 werden 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 verfügbar, wobei das Plattformupdate für Windows 7 installiert ist. Weitere Informationen zum Plattformupdate für Windows 7 finden Sie unter Plattformupdate für Windows 7.

D3D11InstallHelper.dll

D3D11InstallHelper.dll hosten die Kernfunktionen zum Erkennen von Direct3D 11-Komponenten und zum Ausführen des Systemupdates über den Windows Update-Dienst, falls zutreffend. Die DLL zeigt keine Meldungen oder Dialogfelder direkt an.

Die DLL besteht aus den folgenden Einstiegspunkten:

CheckDirect3D11Status

Diese Funktion führt die erforderlichen Prüfungen aus und gibt den Status von Direct3D 11 auf diesem Computer zurück. Für diese Funktion sind keine Administratorrechte erforderlich.

  • Ein 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 Version von Windows Direct3D 11 oder verwandte Technologien nicht unterstützt.
  • Ein 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 das System direct3D 11 nicht installiert hat, aber dass das Systemupdate für diese Version von Windows gilt.

DoUpdateForDirect3D11

Diese Funktion verwendet die Windows Update-API, um das Systemupdate für die Installation von Direct3D 11 auf diesem System auszuführen, falls zutreffend. Beachten Sie, dass für diese Funktion eine Netzwerkkonnektivität mit Windows Update und administratorrechten erforderlich ist. Es verwendet eine optionale Statusrückruffunktion und einen Benutzerkontextzeiger und gibt nach Abschluss des Vorgangs 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 den 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 ein D3D11IH_STATUS_REQUIRES_UPDATE Status von 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 der Download oder die Installation von Windows Update fehlschlägt, wird 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, das angibt, dass das Problem zeitweise oder im Zusammenhang mit netzwerkkonfigurations- oder Firewalleinstellungen liegt. Der Versuch der Aktualisierungsfunktion ist möglicherweise erfolgreich.

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

D3D11Install.exe

Anmerkung

D3D11Install.exe erfordert, dass D3D11InstallHelper.dll ausgeführt werden kann.

D3D11Install.exe ist ein Tool für die Verwendung von D3D11InstallHelper.dll als eigenständiges Installationsprogramm, das mit UI- und Endbenutzermeldungen vollständig ist, sowie als Beispiel für die ordnungsgemäße Verwendung der DLL fungiert. Der Prozess wird mit 0 beendet, wenn Direct3D 11 bereits installiert ist, wenn das Systemupdate erfolgreich angewendet wird, ohne einen Systemneustart erforderlich zu machen, wenn eine Service Pack-Installation erforderlich ist oder Direct3D 11 von diesem Computer nicht unterstützt wird. Ein 1 wird zurückgegeben, wenn das Systemupdate erfolgreich angewendet wird und ein Systemneustart erforderlich ist, um den Vorgang abzuschließen. Für andere Fehlerbedingungen wird ein 2 zurückgegeben. Beachten Sie, dass für diese ausführbare Datei Administratorrechte ausgeführt werden müssen, und es verfügt über ein Manifest, das die Rechteerweiterung 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 verwendet werden oder direkt von Installern verwendet werden.

Sie unterstützt die folgenden Befehlszeilenoptionen:

/quiet

Zeigt keine Nachrichten, Eingabeaufforderungen, Statusdialogfelder oder Fehlermeldungen an.

/passiv

Zeigt keine Nachrichten, Eingabeaufforderungen oder Fehlermeldungen an, zeigt jedoch das Dialogfeld "Status" an.

/minimal

Zeigt nur minimale Eingabeaufforderungen an.

/y

Unterdrückt die Aufforderung, die Installation des Updates zu bestätigen, falls erforderlich und zutreffend, für eine Standard- und Minimalinstallation.

/langid dezimal

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

/wu

Erzwingt die Verwendung von Windows Update anstelle der Systemstandardeinstellung, 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

Um die Einfache Installation des Supports zu erfüllen, Technische Anforderung 3.1 für Spiele für Windows, müssen Sie sorgfältig darauf achten, dass alle Eingabeaufforderungen für Endbenutzer frühzeitig im Installationsprozess angezeigt werden und sicherstellen, dass es nicht mehrere UAC-bezogene Rechteerweiterungsaufforderungen gibt. Es gibt drei grundlegende Optionen zum Erreichen dieses Ziels:

  1. Die einfachste Methode besteht darin, die D3D11Install.exe mit dem Befehlszeilenschalter /minimalauszuführen. Dies sollte frühzeitig im Installationsprogramm 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 den Status D3D11IH_STATUS_NEED_LATEST_SP erforderlich sind, wobei für die Auflösung manuelle Benutzervorgänge erforderlich sind. Das Statusergebnis von D3D11IH_STATUS_NOT_SUPPORTED kann verwendet werden, um die Installation von Direct3D 11-bezogenen Ressourcen oder als Fehlerbedingung für Nur-Direct3D 11-Anwendungen zu steuern. Andernfalls handelt es sich nicht unbedingt um 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, indem Sie das Dialogfeld D3D11Install.exe und Zeichenfolgentabellenressourcen untersuchen. Der Updateeinstiegspunkt erfordert Administratorrechte.
  3. Ein Hybridansatz besteht darin, den Status mit D3D11InstallHelper.dllzu überprüfen, und im Falle des Statuscodes 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 die Aktualisierung nach Bedarf auszuführen. Diese Schritte sollten frühzeitig im Installationsprozess ausgeführt werden, in der Regel unmittelbar nach dem Q&A, und das Ausführen der ausführbaren Datei erfordert Administratorrechte.

Integration in InstallShield

Die Behandlung der Direct3D 11-Bereitstellung von InstallShields InstallScript erfolgt ganz einfach mithilfe des D3D11InstallHelper-Beispiels. Die schritte für die Integration mit InstallShield mit InstallScript sind wie folgt (unter Verwendung der Methode 3, die im vorherigen Abschnitt beschrieben wird):

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

  2. Fügen Sie D3D11InstallHelper.dll und D3D11Install.exe dem Projekt in Supportdateienhinzu.

    So fügen Sie die Dateien zum InstallShield Project

    1. Klicken Sie auf der Registerkarte Installations-Designer auf Supportdateien/Billboards unter Verhalten und Logik im Navigationsbereich auf der linken Seite.
    2. Klicken Sie auf Sprachenunabhängige, klicken Sie dann mit der rechten Maustaste im Fenster Dateien, und wählen Sie Dateien einfügenaus. Navigieren Sie, um D3D11InstallHelper.dll und D3D11Install.exehinzuzufügen. Der Standardspeicherort für diese Dateien lautet: SDK-Stamm\Samples\C++\Misc\Bin\x86
  3. Klicken Sie im InstallScript-Explorer auf die InstallScript-Datei (in der Regel Setup.rul), die die DLL oder ausführbare Datei aufruft, die sich unter Verhalten und Logik im Navigationsbereich auf der linken Seite 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 PrototypNUMMER 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 PrototypNUMMER D3D11InstallHelper.DoUpdateForDirect3D11IS(BOOL); ```

  1. Fügen Sie das folgende InstallScript 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;
    

Integration in ein MSI-Paket

Im Folgenden finden Sie eine allgemeine Beschreibung der Schritte zum Integrieren der Direct3D 11-Bereitstellung mithilfe von benutzerdefinierten MSI-Aktionen (unter Verwendung von Methode 3, weiter oben in diesem Thema beschrieben):

  1. Fügen Sie der MSI-Eigenschaftstabelle 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 eine 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 bei 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, das in einem Kontext mit erhöhten Rechten ausgeführt werden soll.
  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 in den folgenden Anweisungen ausführlich beschrieben, die einen Prozess beschreiben, der mit einem MSI-Editor durchgeführt werden kann, z. B. dem Orca-Editor. 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 zur Binärtabelle im MSI-Paket hinzu.

    Name Daten
    D3D11IH Dateipfad zur DLL-\D3D11InstallHelper.dll

     

    Anmerkung

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

     

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

    Aktion Art Quelle 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 zur Tabelle "InstallExecuteSequence" im MSI-Paket hinzu.

    Aktion Zustand Reihenfolge Notizen
    Direct3D11SetProps 1016 Die Sequenznummer platziert die Aktion bald nach CostFinalize.
    Direct3D11DoInstall NICHT installiert 4004 Diese benutzerdefinierte Aktion geschieht nur während einer neuen Installation für alle Benutzer. Die Sequenznummer platziert die Aktion nach InstallFiles und nach den Rollbacks.
    Direct3D11Finish 6615 Die Sequenznummer platziert die Aktion bald nach InstallFinalize.

     

  5. Fügen Sie die in der folgenden Tabelle gezeigte Zeile zur Tabelle Property im MSI-Paket hinzu.

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

     

    Anmerkung

    Der durch den Pfad angegebene Speicherort ist relativ zum speicherort, der durch den 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 drucken Nachrichten an den standardmäßigen Windows-Debugausgabemechanismus.

Unternehmenseinstellungen

Das D3D11InstallHelper-Beispiel wurde für die Standardbereitstellung über Windows Update entwickelt. Dies ist das am häufigsten verwendete Szenario für die Installation eines Spiels durch Verbraucher. Viele Spieleentwickler, die für Herausgeber und entwicklungsstudios arbeiten, tun dies jedoch in Unternehmenseinstellungen mit einem lokal verwalteten Server, der Softwareupdates mithilfe der Windows Server Update Services (WSUS)-Technologie bereitstellt. In dieser Art von Umgebung hat der lokale IT-Administrator die Genehmigungssteuerung, welche Updates für Computer im Unternehmensnetzwerk verfügbar gemacht werden, und die standardmäßige Consumerversion des 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 /wu Befehlszeilenschalter. Nicht alle Unternehmensnetzwerke ermöglichen jedoch Verbindungen mit den öffentlichen Microsoft-Servern.
  • 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 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 abrufen kann, und es handelt sich nur um Entwickler in großen Organisationen, die wahrscheinlich in solchen Umgebungen sind.

Windows-Firewall für Spieleentwickler

Windows Games Explorer für Spieleentwickler