Status Simpan dan Pulihkan Blok Status (Direct3D 9)

Blok status adalah sekelompok status perangkat. Status perangkat terdiri dari status render, status puncak, status piksel, atau semua hal di atas. Blok status berisi rekam jepret status perangkat saat ini, atau Anda dapat membuat blok status yang merekam setiap perubahan status yang dilakukan aplikasi Anda.

Mengambil Blok Status

Pilih jenis status yang ingin Anda ambil, dan buat blok status seperti ini:

IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->CreateStateBlock( D3DSBT_ALL, &pStateBlock );

IDirect3DDevice9::CreateStateBlock membuat blok status, dan secara otomatis menangkap status perangkat. Status perangkat ditentukan oleh jenis blok status dalam argumen pertama. Status ini bisa menjadi salah satu dari yang berikut: semua status perangkat (lihat Menyimpan Semua Status Perangkat dengan StateBlock (Direct3D 9)), semua status piksel (lihat Menyimpan Status Piksel Dengan StateBlock (Direct3D 9)), atau semua status vertex (lihat Menyimpan Status Vertex Dengan StateBlock (Direct3D 9)).

Sistem efek menggunakan blok status untuk menyimpan status. Setelah ID3DXEffect::Begin dipanggil, blok status dibuat dan status ditangkap. Ketika ID3DXEffect::End dipanggil, status blok status diterapkan kembali ke perangkat.

Menangkap Status Individu

Untuk menyimpan urutan status kustom, bungkus status yang ingin Anda simpan dalam pasangan IDirect3DDevice9::BeginStateBlock dan IDirect3DDevice9::EndStateBlock . BeginStateBlock memberi tahu perangkat saat ini untuk menyiapkan blok status dan menambahkannya setiap perubahan status yang terjadi hingga EndStateBlock dipanggil. Berikut contohnya:

IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->BeginStateBlock();
pd3dDevice->SetRenderState ( D3DRS_ZENABLE, true );
pd3dDevice->EndStateBlock( &pStateBlock );

Ini akan menyimpan sejumlah perubahan status dalam urutan apa pun ke stateblock kustom. Kemudian, ketika Anda ingin menggunakan stateblock untuk mengatur ulang status perangkat, panggil IDirect3DStateBlock9::Apply. Ini hanya akan menimpa status perangkat yang telah ditangkap di blok status. Status perangkat lain yang tidak ditangkap dengan stateblock kustom tidak akan diubah. Sekali lagi, karena objek stateblock adalah antarmuka, Anda harus melepaskannya ketika Anda selesai dengannya.

Status (Direct3D 9)