상태 개체(Direct3D 10)

Direct3D 10에서 디바이스 상태는 상태 개체로 그룹화되어 상태 변경 비용을 크게 줄입니다. 상태 개체는 여러 개이며 각 상태 개체는 특정 파이프라인 단계의 상태 집합을 초기화합니다. 각 상태 개체 형식을 최대 4096개까지 만들 수 있습니다.

입력 레이아웃 상태

이 상태 그룹( D3D10_INPUT_ELEMENT_DESC 참조)은 입력 어셈블러 단계가 입력 버퍼에서 데이터를 읽고 꼭짓점 셰이더에서 사용하기 위해 어셈블하는 방법을 나타냅니다. 여기에는 입력 버퍼 내 요소 수, 입력 데이터의 서명 등의 상태가 포함됩니다. 입력 어셈블러 단계는 메모리에서 파이프라인으로 기본 형식을 스트리밍하는 작업이 파이프라인의 새로운 단계입니다.

input-layout-state 개체를 만들려면 CreateInputLayout을 참조하세요.

래스터라이저 상태

이 상태 그룹( D3D10_RASTERIZER_DESC 참조)은 래스터라이저 단계를 초기화합니다. 이 개체는 fill 또는 cull 모드와 같은 상태를 포함하여 클리핑을 위해 가위 직사각형을 활성화하고 다중 샘플 매개 변수를 설정합니다. 이 단계에서는 원형을 픽셀로 래스터화하여 원형을 클리핑하고 뷰포트로 매핑하는 등의 작업을 수행합니다.

rasterizer-state 개체를 만들려면 CreateRasterizerState를 참조하세요.

깊이 스텐실 상태

이 상태 그룹( D3D10_DEPTH_STENCIL_DESC 참조)은 출력 병합 단계의 깊이 스텐실 부분을 초기화합니다. 보다 구체적으로는, 이 개체는 깊이 및 스텐실 테스트를 초기화합니다.

depth-stencil-state 개체를 만들려면 CreateDepthStencilState를 참조하세요.

혼합 상태

이 상태 그룹( D3D10_BLEND_DESC 참조)은 출력 병합기 단계의 혼합 부분을 초기화합니다.

blend-state 개체를 만들려면 CreateBlendState를 참조하세요.

샘플러 상태

이 상태 그룹( D3D10_SAMPLER_DESC 참조)은 샘플러 개체를 초기화합니다. 샘플러 개체는 셰이더 단계가 메모리에서 텍스처를 필터링하는 데 사용합니다.

Direct3D 9와 Direct3D 10의 차이점:

  • Direct3D 10에서 샘플러 개체는 더 이상 특정 텍스처에 바인딩되지 않으며 연결된 리소스가 있는 경우 필터링을 수행하는 방법을 설명합니다.

 

sampler-state 개체를 만들려면 CreateSamplerState를 참조하세요.

성능 고려 사항

API가 상태 개체를 사용하도록 설계하면 여러 가지 성능 이점이 생깁니다. 이러한 이점에는 개체 생성 시 상태를 확인, 하드웨어에 상태 개체 캐싱을 사용, 상태 설정 API 호출 시(상태 대신 핸들을 상태 개체로 전달하여) 상태 수량이 크게 감소 등이 있습니다.

이러한 성능 향상을 실현하려면 애플리케이션이 시작하는 시점에서 렌더 루프 훨씬 이전에 상태 개체를 생성해야 합니다. 상태 개체는 일단 생성된 후에는 변경할 수 없습니다. 대신 삭제하고 다시 만들어야 합니다. 이 제한에 대처하기 위해 각 유형의 상태 개체를 최대 4096개까지 만들 수 있습니다. 예를 들어 다양한 샘플러 상태 조합을 사용하여 여러 샘플러 개체를 만들 수 있습니다. 그런 다음 샘플러 상태 변경은 핸들을 개체에 전달하는 적절한 Set API를 호출하여 수행됩니다(샘플러 상태와 반대). 그러면 호출 횟수와 데이터 양이 크게 감소하므로 상태 변경을 위한 각 렌더 프레임 동안 오버헤드가 크게 줄어듭니다.

또는 애플리케이션에서 자동으로 효율적인 상태 개체 생성 및 삭제를 관리하는 효과 시스템을 사용할 수도 있습니다.

API 기능(Direct3D 10)