notJustCode.it
 
\\ Home : Articoli
Enumerazioni
Di RobyDx (del 15/01/2007 @ 20:59:26, in DirectX9, linkato 2944 volte)

L’enumerazione è la cosa che all’apparenza è la meno importante e noiosa ma in realtà è fondamentale per realizzare applicazioni (e quindi giochi) da distribuire. Si può dire che ogni mese esce un nuovo modello di scheda video con quelle bellissime locandine tipo “supporto per effetto pinco pallino” o “ora anche con motore super mega ecc.. ecc..”. A parte gli scherzi le schede man mano che escono non migliorano solo in potenza e in quantità di memoria ma anche nelle caratteristiche. Per chi realizza programmi grafici o giochi significa avere disponibilità o meno per determinati effetti. Sapere cosa posso fare è sicuramente fondamentale per poter inserire effetti più o meno complessi. Dobbiamo quindi imparare ad estrarre queste informazioni direttamente dalla scheda video. Qualcuno potrebbe aggiungere che sarebbe sufficiente un programma che ci enumera le caratteristiche della nostra scheda ma non è così. Immaginate di creare un gioco in cui inserite un certo effetto: e se quell’effetto non è supportato da chi lo usa? In questo caso sarà direttamente il gioco ad intervenire riducendo o eliminando quell’effetto in modo che continui a funzionare. DirectX offre una serie di oggetti per l’enumerazione talmente ricchi di informazione che ci vorrebbe un tutorial di 100 pagine per descriverne ognuno. In questo tutorial vi insegnerò come ricevere le informazioni più importanti e su come avere le altre. Per questo tutorial non è necessario creare un device e quindi non creeremo alcun schermo in finestra o fullscreen. Sarà sufficiente aggiungere il riferimento a DirectX, Direct3D e Direct3DX dal menù aggiungi riferimenti.

L’oggetto manager

L’oggetto responsabile della cattura delle informazioni è l’oggetti manager. Non c’è bisogno di dichiararlo, se userete imports per DirectX e Direct3D potrete usarlo direttamente.

Informazioni sulla scheda video

Le informazioni sulla scheda video sono contenute nell oggetto adapterInformation. Dichiarate un oggetto e ponetelo uguale a manager.Adapters(0). Ora tramite scheda potrete conoscere le prime info.

Dim scheda As AdapterInformation = Manager.Adapters(0)

Ad esempio questa funzione restituisce nome e versione del driver della vostra scheda

scheda.Information.Description

scheda.Information ha molti campi e ad occhio potete capire cosa restituisce ognuno (Driver name, Driver version si capisce abbastanza).

Calcolo risoluzioni

Il calcolo delle risoluzioni è uno degli usi più comuni. Tramite manager è infatti possibile conoscere tutte le risoluzioni che il PC può visualizzare sullo schermo. Dichiarate una variabile come questa

Dim risoluzioni As DisplayModeEnumerator
risoluzioni = scheda.SupportedDisplayModes()

in risoluzioni c’è ora un elenco di modalità video. Per leggerle occorre un oggetto

Dim schermo As DisplayModeCollection

Ed effettuare un ciclo

Dim i As Integer
For i = 0 To risoluzioni.Count
    risoluzioni.MoveNext()
    schermo = risoluzioni.Current() ‘da schermo estraete le informazioni
Next

In ogni ciclo schermo conterrà una delle modalità che si differenziano per alcune caratteristiche
Width e Heigth: larghezza e altezza della modalità
Format: colore della risoluzione, di solito Format.X8R8G8B8 per il 32Bit mode e Format.R5G6B5 per il 16 bit mode
Frequency: frequenza del monitor che può essere settata durante l’inizializzazione.
Di solito l’elenco è molto lungo. Se l’elenco è vuoto potreste non avere supporto per DirectX9.
In particolare potete verificare una modalitàdi colore tramite questa istruzione

Manager.CheckDeviceType(0, DeviceType.Hardware, Format.X8R8G8B8, Format.X8R8G8B8, False)

Qui controlliamo se il colore e la modalità è compatibile. Nel mio caso 32Bit di formato, accellerazione hardware e modalità non in finestra (fullscreen). La funzione restituisce un boolean.
Potete verificare anche il supporto per il depth buffer tramite

Manager.CheckDepthStencilMatch(0, DeviceType.Hardware, Format.X8R8G8B8, Format.X8R8G8B8, DepthFormat.D16)

In questo caso controlliamo se una superficie (il backbuffer è una superficie) supporta una risoluzione ed uno specifico depth buffer. Nel mio caso 16bit di depth con 32 bit di colore.

Abilità della scheda

Le abilità di una scheda riguardano formati per texture, superfici ed altri oggetti ed effetti supportati.
Per sapere ad esempio se un determinato formato texture è supportato vedere se è vera questa

Manager.CheckDeviceFormat(0, DeviceType.Hardware, Format.R5G6B5, Usage.WriteOnly, ResourceType.Textures, DepthFormat.D16)

Ora passiamo all’elenco più lungo.
La maggior parte delle caratteristiche sono inserite in un oggetto chiamato caps

Dim caps As Caps
caps = Manager.GetDeviceCaps(0, DeviceType.Hardware)

Ora caps ha una montagna di caratterestiche che state freschi se ve le spiego tutte. Non disperate, la maggior parte si intuisce da sola e spesso spiegherò ogni ruolo al momento che ci servirà. Inoltre sulla SDK della microsoft vi è un elenco dettagliato di ognuna. Ognuna delle proprietà è un intero, una stringa o un insieme di proprietà. Lavorate di puntini e potrete vedere tutta la struttura.
Ad esempio caps.MaxSimultaneousTextures è il numero massimo di texture visualizzabili o
caps.TextureFilterCaps.SupportsMinifyLinear indica se è compatibile il filtro lineare per le texture.
Vi lascio ad un programmino che vi enumera alcune caratteristiche della scheda. Per un insieme completo delle caratteristiche esiste un programma di utilities all’interno della SDK microsoft che enumera tutte le caps.
Fate pratica.

Esempio in VB.Net

Esempio C# .Net 2.0

Articolo Articolo  Storico Storico Stampa Stampa
I commenti sono disabilitati.
"Se tutto deve rimanere com'è, è necessario che tutto cambi"

Giuseppe Tomasi di Lampedusa, Il gattopardo


Cerca per parola chiave
 

Titolo
Articoli (4)
C++ (4)
Direct3D10 (30)
Direct3D11 (20)
DirectX9 (82)
DotNet (10)
English (9)
FanGames (22)
ManagedDX11 (2)
Materiale Utile (4)
News (39)
Shader Library (12)
SharpDX (1)
Software (25)
Tecnologia (19)
Varie (9)

Gli interventi più cliccati

Ultimi commenti:
If you wish to retai...
23/05/2013 @ 13:07:45
Di chanel outlet
You deficit of self-...
23/05/2013 @ 13:07:13
Di cartier watches uk
Reinforce your own l...
23/05/2013 @ 13:06:37
Di replica watches
Whenever you"re shiv...
23/05/2013 @ 13:06:11
Di swiss replica watches
It's likely you have...
23/05/2013 @ 13:05:02
Di chanel handbags
Cheap automobile ins...
23/05/2013 @ 13:04:28
Di replica watches

Titolo
Con quale tecnologia state realizzando o avete intenzione di realizzare i vostri progetti?

 DirectX11
 DirectX10
 DirectX9
 XNA
 DirectX8 o Precedenti
 OpenGL
 Motori grafici già pronti
 Altro

Titolo
Umorismo (17)

Le fotografie più cliccate



Ci sono 185 persone collegate
Sono state visualizzate  pagine

18/05/2022 @ 22:07:27
script eseguito in 46 ms