Statusblokken opslaan en herstellen (Direct3D 9)
Een statusblok is een groep apparaatstatussen. De apparaatstatus bestaat uit de renderstatus, hoekpuntstatus, pixelstatus of alle bovenstaande. Een statusblok bevat een momentopname van de huidige status van een apparaat of u kunt een statusblok maken waarin elke statuswijziging wordt vastgelegd die door uw toepassing wordt aangebracht.
Een statusblok vastleggen
Kies het type status dat u wilt vastleggen en maak als volgt een statusblok:
IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->CreateStateBlock( D3DSBT_ALL, &pStateBlock );
IDirect3DDevice9::CreateStateBlock maakt een statusblok en legt automatisch de apparaatstatus vast. De apparaatstatus wordt opgegeven door het statusbloktype in het eerste argument. Deze status kan een van de volgende zijn: alle apparaatstatussen (zie Alle apparaatstatussen opslaan met een StateBlock (Direct3D 9)), alle pixelstatussen (zie Pixelstatus opslaan met een StateBlock (Direct3D 9)) of alle hoekpuntstatussen (zie VertexStatussen opslaan met een StateBlock (Direct3D 9)).
Het effectsysteem maakt gebruik van een statusblok om de status op te slaan. Nadat ID3DXEffect::Begin wordt aangeroepen, wordt er een statusblok gemaakt en wordt de status vastgelegd. Wanneer ID3DXEffect::End wordt aangeroepen, wordt de status van het statusblok opnieuw toegepast op het apparaat.
Afzonderlijke statussen vastleggen
Als u een aangepaste statusreeks wilt opslaan, verpakt u de status die u wilt opslaan in een IDirect3DDevice9::BeginStateBlock en IDirect3DDevice9::EndStateBlock paar. BeginStateBlock vertelt het huidige apparaat om een statusblok in te stellen en er elke statuswijziging aan toe te voegen die plaatsvindt totdat EndStateBlock wordt aangeroepen. Hier volgt een voorbeeld:
IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->BeginStateBlock();
pd3dDevice->SetRenderState ( D3DRS_ZENABLE, true );
pd3dDevice->EndStateBlock( &pStateBlock );
Hiermee wordt een willekeurig aantal statuswijzigingen in elke volgorde opgeslagen in een aangepast statusblok. Wanneer u later het statusblok wilt gebruiken om de apparaatstatus opnieuw in te stellen, roept u IDirect3DStateBlock9::Pastoe. Hiermee wordt alleen de apparaatstatus overschreven die is vastgelegd in het statusblok. Alle andere apparaatstatussen die niet zijn vastgelegd met het aangepaste statusblok, worden niet gewijzigd. Nogmaals, omdat het stateblock-object een interface is, moet u het vrijgeven wanneer u er klaar mee bent.
Verwante onderwerpen