Selezione di un dispositivo (Direct3D 9)

Le applicazioni possono eseguire query sull'hardware per rilevare i tipi di dispositivo Direct3D supportati. Questa sezione contiene informazioni sulle attività principali relative all'enumerazione delle schede di visualizzazione e alla selezione dei dispositivi Direct3D.

Un'applicazione deve eseguire una serie di attività per selezionare un dispositivo Direct3D appropriato. Si noti che i passaggi seguenti sono destinati a un'applicazione a schermo intero e che, nella maggior parte dei casi, un'applicazione con finestra può ignorare la maggior parte di questi passaggi.

  1. Inizialmente, l'applicazione deve enumerare le schede di visualizzazione nel sistema. Un adattatore è un componente hardware fisico. Si noti che la scheda grafica potrebbe contenere più di una singola scheda, come nel caso di uno schermo a doppia testa. Le applicazioni non interessate al supporto di più monitor possono ignorare questo passaggio e passare D3DADAPTER_DEFAULT al metodo IDirect3D9::EnumAdapterModes nel passaggio 2.

  2. Per ogni scheda, l'applicazione enumera le modalità di visualizzazione supportate chiamando IDirect3D9::EnumAdapterModes.

  3. Se necessario, l'applicazione verifica la presenza di accelerazione hardware in ogni modalità di visualizzazione enumerata chiamando IDirect3D9::CheckDeviceType, come illustrato nell'esempio di codice seguente. Si noti che questo è solo uno dei possibili usi per IDirect3D9::CheckDeviceType; per informazioni dettagliate, vedere Determinazione del supporto hardware (Direct3D 9).

    D3DPRESENT_PARAMETERS Params;
    // Initialize values for D3DPRESENT_PARAMETERS members. 
    
    Params.BackBufferFormat = D3DFMT_X1R5G5B5; 
    
    if(FAILED(m_pD3D->CheckDeviceType(Device.m_uAdapter, 
                      Device.m_DevType, 
                      Params.BackBufferFormat, Params.BackBufferFormat, 
                      FALSE))) 
        return E_FAIL;
    
  4. L'applicazione verifica il livello di funzionalità desiderato per il dispositivo in questa scheda chiamando il metodo IDirect3D9::GetDeviceCaps . La funzionalità restituita da questo metodo è garantita come costante per un dispositivo in tutte le modalità di visualizzazione, verificata da IDirect3D9::CheckDeviceType.

  5. I dispositivi possono sempre eseguire il rendering su superfici del formato di una modalità di visualizzazione enumerata supportata dal dispositivo. Se l'applicazione deve eseguire il rendering in una superficie di un formato diverso, può chiamare IDirect3D9::CheckDeviceFormat. Se il dispositivo può eseguire il rendering nel formato, è garantito che tutte le funzionalità restituite da IDirect3D9::GetDeviceCaps siano applicabili.

  6. Infine, l'applicazione può determinare se le tecniche di multicampionamento, ad esempio l'anti-aliasing della scena completa, sono supportate per un formato di rendering usando il metodo IDirect3D9::CheckDeviceMultiSampleType .

Dopo aver completato i passaggi precedenti, l'applicazione deve avere un elenco di modalità di visualizzazione in cui può funzionare. Il passaggio finale consiste nel verificare che sia disponibile una quantità sufficiente di memoria accessibile dal dispositivo per supportare il numero necessario di buffer e antialiasing. Questo test è necessario perché l'utilizzo della memoria per la modalità e la combinazione di multisample non è possibile prevedere senza verificarlo. Inoltre, alcune architetture di adattatori di visualizzazione potrebbero non avere una quantità costante di memoria accessibile dal dispositivo. Ciò significa che un'applicazione deve essere in grado di segnalare errori di memoria insufficiente durante la modalità schermo intero. In genere, un'applicazione deve rimuovere la modalità a schermo intero dall'elenco di modalità offerte a un utente oppure deve tentare di utilizzare meno memoria riducendo il numero di buffer back o usando una tecnica di multicampionamento meno complessa.

Un'applicazione con finestra esegue un set di attività simile.

  1. Determina il rettangolo desktop coperto dall'area client della finestra.
  2. Enumera gli adattatori, cercando l'adattatore il cui monitor copre l'area client. Se l'area client è di proprietà di più adattatori, l'applicazione può scegliere di eseguire l'unità di ogni scheda in modo indipendente oppure di guidare una singola scheda e di trasferire pixel Direct3D da un dispositivo a un altro in fase di presentazione. L'applicazione può anche ignorare due passaggi precedenti e usare l'adattatore D3DADAPTER_DEFAULT. Si noti che questo potrebbe comportare un'operazione più lenta quando la finestra viene posizionata su un monitor secondario.
  3. L'applicazione deve chiamare IDirect3D9::CheckDeviceType per determinare se il dispositivo può supportare il rendering in un buffer nascosto del formato specificato in modalità desktop. IDirect3D9::GetAdapterDisplayMode può essere usato per determinare il formato di visualizzazione del desktop, come illustrato nell'esempio di codice seguente.
    D3DPRESENT_PARAMETERS Params;
    // Initialize values for D3DPRESENT_PARAMETERS members. 
    
    // Use the current display mode.
    D3DDISPLAYMODE mode;
    
    if(FAILED(m_pD3D->GetAdapterDisplayMode(Device.m_uAdapter , &mode)))
        return E_FAIL;
    
    Params.BackBufferFormat = mode.Format;
    
    if(FAILED(m_pD3D->CheckDeviceType(Device.m_uAdapter, Device.m_DevType, 
    Params.BackBufferFormat, Params.BackBufferFormat, FALSE)))
        return E_FAIL;
    

Dispositivi Direct3D