Distribuzione di Direct3D 11 per sviluppatori di giochi
Questo articolo descrive come distribuire i componenti Direct3D 11 in un sistema, se necessario.
- Sintesi
- Direct3D 11.3
- Direct3D 11.2
- Direct3D 11.1
- D3D11InstallHelper.dll
- D3D11Install.exe
- Integrazione nei programmi di installazione
- Suggerimenti sul debug
- Impostazioni aziendali
- Articoli correlati
Panoramica
L'API Direct3D 11 estende l'API Direct3D 10.1 esistente con supporto per il rendering multithreading e la creazione di risorse, Compute Shader, tassellatura hardware, compressione delle trame BC6H/BC7 e modello di shader HLSL 5.0 con collegamento a shader dinamico. Oltre al componente Direct3D 11, nel runtime DirectX 11 sono inclusi diversi componenti grafici aggiuntivi: Direct3D 11, DXGI 1.1, 10level9, warp10 software rendering device, Direct2D, DirectWrite e un aggiornamento direct3D 10.1 con supporto per 10level9 e WARP10. Per informazioni su questi e altri componenti grafici di Windows, vedere API grafiche in Windows.
Tutti questi nuovi componenti grafici sono integrati nei sistemi operativi Windows 7 e Windows Server 2008 R2. L'API Direct3D 11 e i componenti correlati possono essere installati anche in Windows Vista usando un aggiornamento di sistema da Windows Update. Questo aggiornamento richiede Windows Vista e Service Pack 2. Gli utenti finali con aggiornamenti automatici abilitati, pertanto, probabilmente hanno già installato i componenti Direct3D 11, come tutti gli utenti di Windows 7.
L'esempio D3D11InstallHelper è progettato per semplificare il rilevamento dell'API Direct3D 11, installare automaticamente l'aggiornamento del sistema, se applicabile al computer di un utente finale e fornire messaggi appropriati all'utente finale nella procedura manuale, se è necessario un Service Pack più recente.
Nota
Il compilatore HLSL (D3DCompile*.dll) e la libreria di utilità D3DX per Direct3D 11 (D3DX11*.dll) non sono incorporati in alcuna versione del sistema operativo Windows, ma possono essere distribuiti come parte del programma di installazione di un'applicazione usando la tecnologia DirectSetup esistente; per altre informazioni sull'uso di DirectSetup, vedere Installazione DirectX per sviluppatori di giochi. "Effects 11" è disponibile come libreria di supporto di origine condivisa in Effects for Direct3D 11 Update ed è possibile includerla direttamente in un'app (analogamente alla libreria di utilità DXUT). Di conseguenza, non ha requisiti di ridistribuzione in fase di esecuzione aggiuntivi.
Direct3D 11.3
Windows 10 viene fornito con l'API Direct3D 11.3 incorporata. Per un elenco delle nuove funzionalità nell'API Direct3D 11.3, vedere Direct3D 11.3 Features (Funzionalità di Direct3D 11.3).
Direct3D 11.2
Windows 8.1 e Windows Server 2012 R2 vengono forniti con l'API Direct3D 11.2 integrata. Per un elenco delle nuove funzionalità nell'API Direct3D 11.2, vedere Direct3D 11.2 Features (Funzionalità di Direct3D 11.2).
Direct3D 11.1
Windows 8 e Windows Server 2012 vengono forniti con l'API Direct3D 11.1 incorporata. Il supporto parziale per l'API Direct3D 11.1 è disponibile in Windows 7 o Windows Server 2008 R2 con l'aggiornamento della piattaforma per Windows 7 installato. Per altre info sull'aggiornamento della piattaforma per Windows 7, vedi Aggiornamento della piattaforma per Windows 7.
D3D11InstallHelper.dll
D3D11InstallHelper.dll ospita la funzionalità di base per il rilevamento dei componenti Direct3D 11 e l'esecuzione dell'aggiornamento del sistema tramite il servizio Windows Update, se applicabile. La DLL non visualizza direttamente messaggi o finestre di dialogo.
La DLL è costituita dai punti di ingresso seguenti:
-
CheckDirect3D11Status
-
Questa funzione esegue i controlli necessari e restituisce lo stato di Direct3D 11 in questo computer. Questa funzione non richiede diritti di amministratore.
- Uno stato di D3D11IH_STATUS_INSTALLED indica che Direct3D 11 è già installato nel computer ed è pronto per l'uso.
- D3D11IH_STATUS_NOT_SUPPORTED indica che questa versione di Windows non supporta Direct3D 11 o tecnologie correlate.
- Uno stato di D3D11IH_STATUS_Nedizione EnterpriseD_LATEST_SP indica che l'ultimo Service Pack di Windows Vista deve essere installato dall'utente.
- Infine, uno stato di D3D11IH_STATUS_REQUIRES_UPDATE indica che il sistema non ha Direct3D 11 installato, ma che l'aggiornamento di sistema si applica a questa versione di Windows.
-
DoUpdateForDirect3D11
-
Questa funzione usa l'API di Windows Update per eseguire l'aggiornamento di sistema per l'installazione di Direct3D 11 in questo sistema, se applicabile. Si noti che questa funzione richiede la connettività di rete a Windows Update per avere esito positivo, nonché diritti amministrativi. Accetta una funzione di callback di stato facoltativa e un puntatore al contesto utente e restituisce un codice di risultato finale al termine.
- Il risultato D3D11IH_RESULT_SUCCESS indica che l'aggiornamento del sistema è stato applicato ed è pronto per l'uso, mentre D3D11IH_RESULT_SUCCESS_REBOOT indica che l'aggiornamento del sistema richiede il riavvio del computer prima del completamento. Si noti che questa funzione non pianifica un riavvio del sistema.
- D3D11IH_RESULT_NOT_SUPPORTED indica che l'aggiornamento di sistema non si applica a questa versione di Windows. Questo risultato non deve verificarsi se questa funzione viene chiamata solo dopo aver ottenuto uno stato di D3D11IH_STATUS_REQUIRES_UPDATE da CheckDirect3D11Status.
- Un risultato di D3D11IH_RESULT_UPDATE_NOT_FOUND indica che il pacchetto di aggiornamento del sistema non è stato trovato nei server Windows Update.
- Se il download o l'installazione di Windows Update non riesce, D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED o D3D11IH_RESULT_UPDATE_INSTALL_FAILED verranno restituiti come risultato.
- Se viene restituito un errore di connettività di rete dall'API di Windows Update, viene restituito il risultato D3D11IH_RESULT_WU_edizione StandardRVICE_ERROR, a indicare che il problema potrebbe essere intermittente o correlato alle impostazioni di rete o del firewall. È possibile che il tentativo della funzione di aggiornamento abbia esito positivo.
Per altre informazioni sull'API di Windows Update, vedere API dell'agente di Windows Update.
D3D11Install.exe
Nota
D3D11Install.exe richiede l'esecuzione di D3D11InstallHelper.dll.
D3D11Install.exe è uno strumento per l'uso di D3D11InstallHelper.dll come programma di installazione autonomo completo di interfaccia utente e messaggi dell'utente finale, oltre a fungere da esempio per l'uso appropriato della DLL. Il processo viene chiuso con 0 se Direct3D 11 è già installato, se l'aggiornamento di sistema viene applicato correttamente senza richiedere un riavvio del sistema, se è necessaria un'installazione del Service Pack o se Direct3D 11 non è supportato da questo computer. Viene restituito un valore 1 se l'aggiornamento del sistema viene applicato correttamente e richiede il completamento di un riavvio del sistema. Viene restituito un valore 2 per altre condizioni di errore. Si noti che questo file eseguibile richiede diritti di amministratore per l'esecuzione e ha un manifesto che richiede l'elevazione dei privilegi durante l'esecuzione in Windows Vista o Windows 7 con controllo dell'account utente abilitato. D3D11Install.exe può essere usato come strumento autonomo per la distribuzione dell'aggiornamento Direct3D 11 oppure può essere usato direttamente dai programmi di installazione.
Supporta le opzioni della riga di comando seguenti:
-
/Tranquilla
-
Non visualizza messaggi, richieste, finestre di dialogo di stato o messaggi di errore.
-
/Passivo
-
Non visualizza messaggi, richieste o messaggi di errore, ma visualizzerà la finestra di dialogo di avanzamento.
-
/Minimo
-
Mostra solo richieste minime.
-
/Y
-
Elimina la richiesta di confermare l'installazione dell'aggiornamento, se necessario e applicabile, per un'installazione standard e minima.
-
/langid decimale
-
Forza il codice dell'identificatore di lingua da usare durante la visualizzazione dei messaggi dell'utente finale e delle risorse della finestra di dialogo. Il valore predefinito è 1024, che usa l'impostazione della lingua predefinita del sistema.
-
/Wu
-
Forza l'uso di Windows Update anziché l'impostazione predefinita del sistema, che può essere Windows Server Update Services (WSUS) in esecuzione in un server gestito o in altre configurazioni non standard.
Integrazione nei programmi di installazione
Per garantire la conformità con l'installazione facile del supporto, il requisito tecnico 3.1 per i giochi per Windows, è necessario prestare attenzione in modo che tutti i prompt degli utenti finali vengano presentati all'inizio del processo di installazione e per assicurarsi che non siano presenti più richieste di elevazione correlate al controllo dell'account utente. Esistono tre scelte di base per raggiungere questo obiettivo:
- Il metodo più semplice consiste nell'eseguire D3D11Install.exe con l'opzione della riga di comando /minimal. Questa operazione deve essere eseguita all'inizio del programma di installazione Q&A e l'installazione deve usare il valore restituito 1 per indicare che un riavvio deve essere pianificato alla fine dell'installazione. L'esecuzione del programma richiede diritti amministrativi.
- Usare direttamente D3D11InstallHelper.dll per rilevare la necessità dell'aggiornamento, fornendo eventuali messaggi dell'utente finale necessari per lo stato D3D11IH_STATUS_Nedizione EnterpriseD_LATEST_SP, in cui la risoluzione richiede operazioni manuali dell'utente. Il risultato dello stato di D3D11IH_STATUS_NOT_SUPPORTED può essere usato per controllare l'installazione di asset correlati a Direct3D 11 o come condizione di errore per le applicazioni solo Direct3D 11, ma non è necessariamente un messaggio utile per l'utente finale. Per lo stato D3D11IH_STATUS_REQUIRES_UPDATE, il programma di installazione può usare direttamente il punto di ingresso della DLL DoUpdateForDirect3D11 per eseguire l'aggiornamento e gestire i vari messaggi dell'utente finale risultanti. Esempi di messaggi standard sono disponibili esaminando la finestra di dialogo D3D11Install.exe e le risorse della tabella di stringhe. Il punto di ingresso dell'aggiornamento richiede diritti di amministratore.
- Un approccio ibrido consiste nel controllare lo stato con D3D11InstallHelper.dll e nel caso del codice di stato D3D11IH_STATUS_Nedizione EnterpriseD_LATEST_SP o D3D11IH_STATUS_REQUIRES_UPDATE, D3D11Install.exe può essere eseguito con le opzioni /minimal e /y per visualizzare la finestra di dialogo o per eseguire l'aggiornamento, in base alle esigenze. Questi passaggi devono essere eseguiti all'inizio del processo di installazione, in genere immediatamente dopo il Q&A e l'esecuzione del file eseguibile richiede diritti amministrativi.
Integrazione in InstallShield
La gestione della distribuzione direct3D 11 da InstallScript di InstallShield viene eseguita facilmente usando l'esempio D3D11InstallHelper. I passaggi necessari per l'integrazione con InstallShield con InstallScript sono i seguenti (usando il metodo 3, descritto nella sezione precedente):
Aprire un progetto InstallScript nell'editor InstallShield.
Aggiungere D3D11InstallHelper.dll e D3D11Install.exe al progetto in File di supporto.
Per aggiungere i file al progetto InstallShield
- Nella scheda Progettazione installazione fare clic su File di supporto/Cartelloni in Comportamento e logica nel riquadro di spostamento a sinistra.
- Fare clic su Indipendente dalla lingua, quindi fare clic con il pulsante destro del mouse nella finestra File e scegliere Inserisci file. Sfoglia per aggiungere D3D11InstallHelper.dll e D3D11Install.exe. Il percorso predefinito per questi file è: SDK root\Samples\C++\Misc\Bin\x86
Nello strumento di esplorazione di InstallScript fare clic sul file InstallScript (in genere Setup.rul) che chiamerà la DLL o il file eseguibile, disponibile in Comportamento e logica nel riquadro di spostamento a sinistra.
Incollare il codice InstallScript seguente nel file nella parte superiore:
#define D3D11IH_STATUS_INSTALLED 0 #define D3D11IH_STATUS_NOT_SUPPORTED 1 #define D3D11IH_STATUS_REQUIRES_UPDATE 2 #define D3D11IH_STATUS_Nedizione EnterpriseD_LATEST_SP 3 #define D3D11IH_STATUS_ERROR -1 prototipo 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_edizione StandardRVICE_ERROR 6 #define D3D11IH_RESULT_ERROR -1 prototipo NUMBER D3D11InstallHelper.DoUpdateForDirect3D11IS(BOOL); '''
Incollare il codice InstallScript seguente nel file nella funzione OnFirstUIBefore, subito prima della restituzione 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;
Integrazione in un pacchetto MSI
Di seguito è riportata una descrizione generale dei passaggi necessari per integrare la distribuzione di Direct3D 11 usando azioni personalizzate MSI (usando il metodo 3, descritto in precedenza in questo argomento):
- Aggiungere una proprietà alla tabella delle proprietà MSI denominata RelativePathToD3D11IH che contiene il percorso relativo di D3D11Install.exe e D3D11InstallHelper.dll durante l'installazione (in genere nell'immagine multimediale). Imposta inoltre una proprietà MSI D3D11IH_STATUS sullo stato restituito da CheckDirect3D11Status (una proprietà stringa uguale al simbolo di enumerazione o "ERROR").
- Dopo l'azione CostFinalize, chiamare la funzione D3D11InstallHelper.dll SetD3D11InstallMSIProperties come azione personalizzata immediata per impostare le proprietà MSI appropriate per le altre azioni personalizzate.
- Dopo l'installazione, attivare un'azione personalizzata posticipata dopo l'azione InstallFiles che chiama la funzione D3D11InstallHelper.dll DoD3D11InstallUsingMSI. L'azione personalizzata deve impostare il flag msidbCustomActionTypeNoImpersonate per l'esecuzione in un contesto con privilegi elevati.
- Dopo l'azione InstallFinalize, chiamare la funzione D3D11InstallHelper.dll FinishD3D11InstallUsingMSI come azione personalizzata immediata per gestire il codice di risultato della richiesta di riavvio riuscito, se necessario.
Questa procedura è descritta in dettaglio nelle istruzioni seguenti, che descrivono un processo che può essere eseguito usando un editor MSI, ad esempio l'editor Orca. Alcuni editor msi hanno procedure guidate che semplificano alcuni di questi passaggi di configurazione.
Per configurare un pacchetto MSI per l'integrazione con D3D11InstallHelper.dll
Aprire il pacchetto MSI in Orca.
Aggiungere la riga illustrata nella tabella seguente alla tabella Binary nel pacchetto MSI.
Nome Dati D3D11IH Percorso del file della DLL\D3D11InstallHelper.dll Nota
Questo file verrà incorporato nel pacchetto MSI, quindi è necessario eseguire questo passaggio ogni volta che si ricompila D3D11InstallHelper.dll.
Aggiungere le righe illustrate nella tabella seguente alla tabella CustomAction nel pacchetto MSI.
Azione Type Source Target Direct3D11SetProps msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH SetD3D11InstallMSIProperties Direct3D11DoInstall msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 D3D11IH DoD3D11InstallUsingMSI Direct3D11Finish msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH FinishD3D11InstallUsingMSI Aggiungere i valori visualizzati per Action, Condition e Sequence nella tabella seguente alla tabella InstallExecuteSequence nel pacchetto MSI.
Azione Condizione Sequence Note Direct3D11SetProps 1016 Il numero di sequenza inserisce l'azione subito dopo CostFinalize. Direct3D11DoInstall NON installato 4004 Questa azione personalizzata verrà eseguita solo durante una nuova installazione per tutti gli utenti. Il numero di sequenza inserisce l'azione dopo InstallFiles e dopo il rollback. Direct3D11Finish 6615 Il numero di sequenza inserisce l'azione subito dopo InstallFinalize. Aggiungere la riga illustrata nella tabella seguente alla tabella Property nel pacchetto MSI.
Proprietà valore RelativePathToD3D11IH percorso del file relativo contenente D3D11Install.exe e D3D11InstallHelper.dll Nota
Il percorso specificato dal percorso è relativo al percorso specificato dal percorso di installazione, ad esempio "redist\".
Salvare il pacchetto MSI. Per informazioni più dettagliate sui pacchetti MSI e Windows Installer, vedere Windows Installer.
Suggerimenti per il debug
Sia D3D11InstallHelper.dll che D3D11Install.exe possono essere compilati con la configurazione debug in Visual Studio e queste versioni visualizzeranno i messaggi nel meccanismo di output di debug standard di Windows.
Impostazioni aziendali
L'esempio D3D11InstallHelper è progettato per la distribuzione standard tramite Windows Update, che è lo scenario più comune per l'installazione di un gioco da parte dei consumer. Tuttavia, molti sviluppatori di giochi, che lavorano per editori e studi di sviluppo, lo fanno nelle impostazioni aziendali che dispongono di un server gestito in locale che forniscono aggiornamenti software usando la tecnologia Windows Server Update Services (WSUS). In questo tipo di ambiente, l'amministratore IT locale ha il controllo dell'approvazione su quali aggiornamenti vengono resi disponibili per i computer all'interno della rete aziendale e la versione consumer standard dell'aggiornamento KB 971644 non è disponibile.
Esistono tre soluzioni di base per la distribuzione di DirectX 11 nelle impostazioni aziendali/aziendali:
- In alcune configurazioni è possibile controllare direttamente Windows Update anziché usare il server WSUS gestito in locale. Per questo motivo, D3D11InstallHelper supporta l'opzione della riga di comando /wu . Tuttavia, non tutte le reti aziendali consentono le connessioni ai server Microsoft pubblici.
- L'amministratore IT locale può approvare la knowledge base 971512, un aggiornamento supportato dall'organizzazione distribuito da WSUS, che include l'API Direct3D 11. Questa è l'unica opzione per un utente standard per ottenere l'aggiornamento direct3D 11 in un ambiente completamente bloccato.
- In alternativa, è possibile installare manualmente 971512 KB.
È molto raro che il computer di un gamer possa ottenere solo gli aggiornamenti da un server WSUS gestito localmente e che solo gli sviluppatori di grandi organizzazioni che potrebbero trovarsi in tali ambienti.