상태 블록 저장 및 복원 상태(Direct3D 9)

상태 블록은 디바이스 상태 그룹입니다. 디바이스 상태는 렌더링 상태, 꼭짓점 상태, 픽셀 상태 또는 위의 모든 상태로 구성됩니다. 상태 블록은 디바이스의 현재 상태 스냅샷 포함하거나 애플리케이션이 만드는 각 상태 변경을 기록하는 상태 블록을 만들 수 있습니다.

상태 블록 캡처

캡처할 상태 유형을 선택하고 다음과 같이 상태 블록을 만듭니다.

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

IDirect3DDevice9::CreateStateBlock 은 상태 블록을 만들고 디바이스 상태를 자동으로 캡처합니다. 디바이스 상태는 첫 번째 인수의 상태 블록 유형에 의해 지정됩니다. 이 상태는 모든 디바이스 상태( StateBlock(Direct3D 9)를 사용하여 모든 디바이스 상태 저장 참조), 모든 픽셀 상태( StateBlock을 사용하여 픽셀 상태 저장(Direct3D 9) 참조) 또는 모든 꼭짓점 상태 중 하나일 수 있습니다( StateBlock을 사용하여 꼭짓점 상태 저장(Direct3D 9 참조))

효과 시스템은 상태 블록을 사용하여 상태를 저장합니다. ID3DXEffect::Begin이 호출되면 상태 블록이 만들어지고 상태가 캡처됩니다. ID3DXEffect::End가 호출되면 상태 블록 상태가 디바이스에 다시 적용됩니다.

개별 상태 캡처

사용자 지정 상태 시퀀스를 저장하려면 IDirect3DDevice9::BeginStateBlockIDirect3DDevice9::EndStateBlock 쌍에 저장할 상태를 래핑합니다. BeginStateBlock은 현재 디바이스에 상태 블록을 설정하고 EndStateBlock이 호출될 때까지 발생하는 모든 상태 변경을 추가하도록 지시합니다. 예를 들면 다음과 같습니다.

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

이렇게 하면 모든 시퀀스의 상태 변경 횟수를 사용자 지정 stateblock에 저장할 수 있습니다. 나중에 stateblock을 사용하여 디바이스 상태를 다시 설정하려면 IDirect3DStateBlock9::Apply를 호출합니다. 이렇게 하면 상태 블록에서 캡처된 디바이스 상태만 덮어쓰게 됩니다. 사용자 지정 상태 차단으로 캡처되지 않은 다른 디바이스 상태는 변경되지 않습니다. 다시 한 번 stateblock 개체는 인터페이스이므로 작업을 완료하면 해제해야 합니다.

상태(Direct3D 9)