DirectX/Inizializzazione/Device e SwapChain: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
ortografia
m Update syntaxhighlight tags - remove use of deprecated <source> tags
 
Riga 10:
== Creare le strutture ==
In quasi tutti i libri e tutorial online troverete una chiamata a questa funzione:
<sourcesyntaxhighlight lang="cpp">
HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, UINT SDKVersion, DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain **ppSwapChain, ID3D10Device **ppDevice);
</syntaxhighlight>
</source>
Questa funzione come ricorda il nome crea Device e SwapChain contemporaneamente. Tralasciamo per un secondo l'enorme numero di argomenti. Per quanto possa essere "comodo" creare entrambe le strutture con una sola istruzione, questo porta almeno un aspetto negativo: nella funzione trovate un puntatore a struttura DXGI_SWAP_CHAIN_DEST *''pSwapChainDesc''. Questa struttura, simile a WNDCLASSEX, serve a descrivere le caratteristiche del programma (risoluzione, profondità di colore, frequenza), tra cui l'[[w:Antialiasing|Antialiasing]].
 
Riga 23:
== Strutture da conoscere ==
La prima struttura da saper usare è DXGI_MODE_DESC. Questa struttura contiene le informazioni riguardanti una determinata risoluzione video:
<sourcesyntaxhighlight lang="cpp">
struct DXGI_MODE_DESC
{
Riga 33:
DXGI_MODE_SCALING Scaling;
};
</syntaxhighlight>
</source>
* Width, Height, sono il numero di pixel orizzontali e verticali che la risoluzione offre (1024x768: Width = 1024, Height = 768).
* RefreshRate è un'altra struttura con due membri: Numerator e Denominator. Questa consente di rappresentare un numero razionale. Il valore di questo campo indica la frequenza di refresh (Refresh Rate). Ne perleremo a breve.
Riga 40:
 
Passiamo a DXGI_SAMPLE_DESC:
<sourcesyntaxhighlight lang="cpp">
struct DXGI_SAMPLE_DESC
{
Riga 46:
UINT Quality;
};
</syntaxhighlight>
</source>
Questa struttura indica le impostazioni di Antialiasing da applicare. ''Count'' è il livello scelto (1 - disattivato, 2, 4, 8, 16, 32). ''Quality'' è un campo a cui ogni scheda video può dare una propria interpretazione. Nonostante si chiami ''Qualità'', aumentarne il valore non corrisponde sempre ad un miglioramento visivo. Impostarlo a valori errati, può far crashare il programma allo stesso modo in cui crasha, dando a ''Count'' un valore errato o non supportato.
 
Veniamo ora allo DXGI_SWAP_CHAIN_DESC, la struttura che ci farà creare lo SwapChain:
<sourcesyntaxhighlight lang="cpp">
struct DXGI_SWAP_CHAIN_DESC
{
Riga 62:
UINT Flags;
};
</syntaxhighlight>
</source>
* BufferDesc: è una struttura di tipo DXGI_MODE_DESC. Indica la modalità video (risoluzione, colore) che vogliamo usare nel caso in cui volessimo lavorare Fullscreen (a schermo intero). Quando lavoriamo in modalità Windowed (disegnamo dentro una finestra delimitata da bordi e barra del titolo), i campi Width e Height vanno impostati alla dimensione della finestra. Indicano insomma i lati del rettangolo da disegno che andremo ad usare.
* SampleDesc: le impostazioni di Antialiasing.
Riga 80:
== Creare le strutture con una sola chiamata ==
Nel caso in cui aveste deciso la strada "semplice", senza Antialiasing, e che crea le strutture in una sola volta dovrete usare questa funzione:
<sourcesyntaxhighlight lang="cpp">
HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, UINT SDKVersion, DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain **ppSwapChain, ID3D10Device **ppDevice);
</syntaxhighlight>
</source>
Vediamo ora gli argomenti:
*pAdapter: quale scheda video vuoi utilizzare? Impostando a NULL, chiediamo di usare quella predefinita. Vedremo dopo come trovare le schede disponibili.
Riga 101:
 
Ecco il codice:
<sourcesyntaxhighlight lang="cpp">
/* Determiniamo quale risoluzione vogliamo utilizzare. Nel prossimo capitolo vedremo. */
/* Supponiamo di voler usare 800x600 */
Riga 134:
if (hr != S_OK)
printf("Errore nella creazione del Device o dello SwapChain\n");
</syntaxhighlight>
</source>
 
{{Avanzamento|75%|14 ottobre 2011}}