Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
PRINCIPALE > DIRECTX8: TERZA PARTE

Eseguire una ricerca veloce nell' archivio delle risorse di Visual Basic Italia®: 

Preso dall'archivio...

Premere il pulsante sotto per accedere direttamente ad un articolo o ad un esempio preso in modo casuale dall'archivio.



Ultimo e-book pubblicato:

"INTRODUZIONE AI CSS"

Lo scopo del CSS language è quello di controllare lo stile dei vari elementi che concorrono a formare un
documento HTML.
Si può operare in tre modi collegamento ad un foglio di stile esterno;definizione degli stili all'inizio
del documento utilizzo della proprietà style all'interno di un Tag HTML (embedded style). Questo e-book introduttivo
servirà per apprendere tali nozioni fondametali dei fogli di stile.

Prezzo: € 0.0.
Presentazione:
REAL SOFTWARE RILASCIA LA VERSIONE 5.0 di REALbasic per Windows






Gorizia, 5 maggio 2003 - Active, distributore in esclusiva di REALSoftware, Austin, Tx, annuncia la disponibilità di REALbasic 5.0 per Windows, uno strumento per lo sviluppo semplice da usare che permette agli utenti Windows di tutti i livelli di creare applicazioni personalizzate e di compilarle sia per la piattaforma Windows che per quella Macintosh.
[>>]

http://www.active-software.com

 

Contatti. Utilizzare l'email generica per domande relative al sito:
Porre domande relative al sito
oppure scrivere ad un responsabile di area.
Responsabile del sito: >Andrea Martelli
Responsabile area "Corso di VB":
> Giorgio Abraini

DirectX8: Applicazioni a tutto schermo o in modalità finestra (windowed)

Questa lezione, consultata da 7108 utenti, è stata giudicata di ottimi contenuti , con un'esposizione di facile comprensione e con un livello di approfondimento buono da 68 votanti.


Visualizzare un'applicazione a tutto schermo

Gran parte delle applicazioni che usano le DirectX sono dotate di una modalità di visualizzazione a tutto schermo: risulterebbe infatti piuttosto scomodo dover ridurre il campo di lavoro per lasciare spazio alla barra delle applicazioni ed alla barra del titolo.
Anche nel progetto sviluppato nell'articolo precedente si aggiungerà tale modalità. Il passo da compiere immediatamente è quello di permettere all'applicazione di chiudersi. Questo perchè non essendoci più controlli e pulsanti di chiusura nella modalità a tutto schermo, si rischia di dover riavviare il computer per terminare l'applicazione.
Dovrà essere aggiunto allora il seguente codice al listato:

Private Sub Form_Click()
Unload Me
End Sub

Questo permette di terminare l'applicazione cliccando col mouse su un qualsiasi punto dello schermo, proprio perchè la form in questa modalità di visualizzazione ha le stesse dimensioni dello schermo intero.
Il passo decisivo per compiere l'operazione in esame è costituito dall'assegnazione di valori alle variabili Visualizzazione (del tipo D3DDISPLAYMODE che cioè racchiude le informazioni sulle modalità di visualizzazione delle immagini) e D3DWindow (del tipo D3DPRESENT_PARAMETERS contiene i parametri di visualizzazione della finestra di esecuzione dell'applicazione).
Ed in particolare questo tipo di operazione dovrà essere compiuta all'interno della funzione Inizializza(), vedremo tra poco in quale punto esatto:

With Visualizzazione
.Format = D3DFMT_X8R8G8B8
.Width = 640
.Height = 480
End With
With D3DWindow
.SwapEffect = D3DSWAPEFFECT_FLIP
.BackBufferCount = 1
.BackBufferFormat = Visualizzazione.Format
.BackBufferHeight = 480
.BackBufferWidth = 640
.hDeviceWindow = Me.hWnd
End With

Vediamo di analizzare il blocco di codice. Le linee dalla seconda alla quarta assegnano il formato all'immagine. Nella memoria nella quale sono archiviate infatti le immagini hanno un formato che può essere scelto e modificato a piacimento. E si parla di formato non solo riguardo alla dimensione delle stesse (attraverso le linee tre e quattro infatti si è impostata la dimensione delle immagini su una grandezza di 640 pixel in larghezza e 480 in altezza, che come si vedrà, corrisponde proprio alle dimensioni dello schermo intero) ma anche riguardo alla loro definizione.
Il grado di definizione permette di indicare quanti bit di memoria sono richiesti per visualizzare ogni singolo pixel di un'immagine.
Nel precedente articolo abbiamo già visto quali costanti possono essere assegnate alla variabile. In questo caso la costante D3DFMT_X8R8G8B8 indica che ogni pixel sarà visualizzato attraverso 32 bit utilizzando un sistema di colori ARGB dove cioè si considera oltre la combinazione rosso, blu e verde, anche la trasparenza della figura.
La settima linea invece determina la procedura di visualizzazione delle immagini. Indicando la costante D3DSWAPEFFECT_FLIP Direct3D si considerano tutte le partizioni della memoria che contengono le immagini ossia i backbuffer dove le immagini vengono archiviate in attesa di essere visualizzate sullo schermo ossia nel frontbuffer.
Si viene così a formare una sequenza per la quale ad ogni buffer viene assegnato un determinato indice da 0 ad n-1 (dove n corrisponde al totale dei buffer presenti e 0 corrisponde al buffer che conteneva l'immagine visualizzata meno di recente):



Nell'esempio in figura i buffer totali sono 3. Quindi n assumerà il valore 3. L'ultimo buffer avrà dunque indice n - 1 = 3 - 1 = 2, il secondo n - 2 = 3 - 2 = 1 ed il primo, cioè quello in attesa di essere visualizzato n - 3 = 3 - 3 = 0.
Questo sistema di rotazione servirà nella visualizzazione delle immagini al richiamo del metodo Present dell'oggetto Direct3DDevice8 in modo tale che il FrontBuffer che contiene l'immagine correntemente mostrata diventi l'ultimo backbuffer (indice n-1) ed il backbuffer che aveva indice 0 adesso diventi il frontbuffer:



Sfortunatamente però questo sistema di rotazione dei buffer può implicare un uso della memoria al di sopra delle capacità del processore. Ecco perchè è possibile indicare una seconda costante ossia D3DSWAPEFFECT_DISCARD che utilizza una sequenza molto simile a D3DSWAPEFFECT_FLIP ma che elimina il buffer una volta visualizzata l'immagine.
Questo non permette di determinare il contenuto dei buffer una volta visualizzati dal momento che vengono via via svuotati.
Molto più immediata è invece la sequenza creata dalle costanti D3DSWAPEFFECT_COPY e D3DSWAPEFFECT_COPY_VSYNC con le quali viene utilizzato solamente un backbuffer il cui contenuto viene visualizzato immediatamente nel frontbuffer.
Ritornando al codice, l'ottava riga indica il numero di backbuffer presenti, cioè uno che è il minimo per poter eseguire correttamente l'applicazione.
Le linee nove, dieci e undici non fanno altro che impostare le dimensioni delle immagini dei backbuffer con le quali verranno poi visualizzate sullo schermo e la definizione delle stesse in termini di bit per pixel. Notare che se la modalità è a tutto schermo le dimensioni delle immagini devono coincidere con quelle dello schermo. La penultima riga infine determina a quale form applicare la visualizzazione a tutto schermo.
Il codice sopra va inserito nella funzione Inizializza() in modo che adesso appaia nel seguente modo:

Private Function Inizializza() As Boolean
Dim Visualizzazione As D3DDISPLAYMODE
Dim D3DWindow As D3DPRESENT_PARAMETERS
Set DX = New DirectX8
Set D3D = DX.Direct3DCreate()
D3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, Visualizzazione
With Visualizzazione
.Format = D3DFMT_X8R8G8B8
.Width = 640
.Height = 480
End With
With D3DWindow
.SwapEffect = D3DSWAPEFFECT_FLIP
.BackBufferCount = 1
.BackBufferFormat = Visualizzazione.Format
.BackBufferHeight = 480
.BackBufferWidth = 640
.hDeviceWindow = Me.hWnd
End With
Set D3DDevice = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, _
Me.hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3DWindow)
Inizializza = True
Exit Function
Errore:
Inizializza = False
End Function

Se il codice funziona come dovrebbe, si visualizzerà l'applicazione a tutto schermo come mostrato in figura:



Se nella routine Form_Load si cambia invece il colore di fondo della form si otterrà uno schermo del colore scelto.
E' inoltre possibile inserire controlli a piacimento gestendoli come si farebbe normalmente con l'unica accortezza di estendere al massimo il piano in fase di progettazione per adattare le dimensioni della form allo schermo intero. In questo modo quando si andranno a posizionare i controlli si potrà avere un'idea migliore delle proporzioni finali.
Infine è buona norma svuotare alla chiusura dell'applicazione quella porzione di memoria utilizzata dai vari oggetti (DirectX8, Direct3D8, Direct3DDevice8 e tutti gli altri eventualmente presenti nel progetto).
Nella routine Form_Unload() si dovrà inserire quindi il seguente codice:

Private Sub Form_Unload(Cancel As Integer)
Set DX = Nothing
Set D3D = Nothing
Set D3DDevice = Nothing
End Sub

Scarica qui l'esempio completo per questo articolo

Approfondimenti

» "Full screen DirectDraw programming"