State Blocks Save and Restore State (Direct3D 9)
Un blocco di stato è un gruppo di stati del dispositivo. Lo stato del dispositivo è costituito da stato di rendering, stato vertice, stato pixel o tutto il precedente. Un blocco di stato contiene uno snapshot dello stato corrente di un dispositivo oppure è possibile creare un blocco di stato che registra ogni modifica dello stato apportata dall'applicazione.
Acquisire un blocco di stato
Scegliere il tipo di stato da acquisire e creare un blocco di stato simile al seguente:
IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->CreateStateBlock( D3DSBT_ALL, &pStateBlock );
IDirect3DDevice9::CreateStateBlock crea un blocco di stato e acquisisce automaticamente lo stato del dispositivo. Lo stato del dispositivo viene specificato dal tipo di blocco di stato nel primo argomento. Questo stato può essere uno dei seguenti: tutto lo stato del dispositivo (vedere Salvataggio di tutti gli stati del dispositivo con un controllo StateBlock (Direct3D 9)), tutto lo stato dei pixel (vedere Salvataggio dello stato pixel con unStateBlock (Direct3D 9) o tutto lo stato dei vertici (vedere Salvataggio degli stati dei vertici con stateBlock (Direct3D 9)).
Il sistema di effetti usa un blocco di stato per salvare lo stato. Dopo aver chiamato ID3DXEffect::Begin, viene creato un blocco di stato e viene acquisito lo stato. Quando viene chiamato ID3DXEffect::End, lo stato del blocco di stato viene riapplicato al dispositivo.
Acquisire singoli stati
Per salvare una sequenza di stato personalizzata, eseguire il wrapping dello stato da salvare in una coppia di IDirect3DDevice9::BeginStateBlock e coppia di IDirect3DDevice9::EndStateBlock. BeginStateBlock indica al dispositivo corrente di configurare un blocco di stato e aggiungervi ogni modifica dello stato che si verifica fino a quando non viene chiamato EndStateBlock. Ecco un esempio:
IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->BeginStateBlock();
pd3dDevice->SetRenderState ( D3DRS_ZENABLE, true );
pd3dDevice->EndStateBlock( &pStateBlock );
In questo modo verrà salvato qualsiasi numero di modifiche di stato in qualsiasi sequenza in un blocco di stato personalizzato. In seguito, quando si vuole usare il blocco di stato per reimpostare lo stato del dispositivo, chiamare IDirect3DStateBlock9::Apply. Questo sovrascriverà solo lo stato del dispositivo acquisito nel blocco di stato. Qualsiasi altro stato del dispositivo non acquisito con il blocco di stato personalizzato non verrà modificato. Ancora una volta, poiché l'oggetto stateblock è un'interfaccia, sarà necessario rilasciarlo al termine dell'operazione.
Argomenti correlati
-
stati (Direct3D 9)