상태 개체(Direct3D 10)
Direct3D 10에서 디바이스 상태는 상태 변경 비용을 크게 줄이는 상태 개체로 그룹화됩니다. 여러 상태 개체가 있으며 각 개체는 특정 파이프라인 단계에 대한 상태 집합을 초기화하도록 설계되었습니다. 각 상태 개체 유형은 최대 4096개까지 만들 수 있습니다.
Input-Layout 상태
이 상태 그룹(D3D10_INPUT_ELEMENT_DESC참조)은 입력 어셈블러 단계 입력 버퍼에서 데이터를 읽고 꼭짓점 셰이더에서 사용하기 위해 어셈블하는 방법을 나타냅니다. 여기에는 입력 버퍼의 요소 수 및 입력 데이터의 서명과 같은 상태가 포함됩니다. 입력 어셈블러 단계는 파이프라인의 새 단계로, 해당 작업은 메모리에서 파이프라인으로 기본 형식을 스트리밍하는 것입니다.
입력 레이아웃 상태 개체를 만들려면 CreateInputLayout참조하세요.
래스터라이저 상태
이 상태 그룹(D3D10_RASTERIZER_DESC참조)은 래스터라이저 단계초기화합니다. 이 개체에는 채우기 또는 컬링 모드, 가위 사각형을 클리핑 및 다중 샘플 매개 변수 설정과 같은 상태가 포함됩니다. 이 단계에서는 기본 형식을 픽셀로 래스터화하여 클리핑 및 뷰포트에 기본 형식 매핑과 같은 작업을 수행합니다.
래스터라이저 상태 개체를 만들려면 createRasterizerState참조하세요.
Depth-Stencil 상태
이 상태 그룹(D3D10_DEPTH_STENCIL_DESC참조)은 출력 병합기 단계깊이 스텐실 부분을 초기화합니다. 보다 구체적으로 이 개체는 깊이 및 스텐실 테스트를 초기화합니다.
깊이 스텐실 상태 개체를 만들려면 CreateDepthStencilState참조하세요.
Blend State
이 상태 그룹(D3D10_BLEND_DESC참조)은 출력 병합기 단계혼합 부분을 초기화합니다.
혼합 상태 개체를 만들려면 createBlendState참조하세요.
샘플러 상태
이 상태 그룹(D3D10_SAMPLER_DESC참조)은 샘플러 개체를 초기화합니다. 샘플러 개체는 셰이더 단계에서 메모리의 텍스처를 필터링하는 데 사용됩니다.
Direct3D 9와 Direct3D 10의 차이점:
- Direct3D 10에서 샘플러 개체는 더 이상 특정 텍스처에 바인딩되지 않으며 연결된 리소스가 있는 경우 필터링을 수행하는 방법을 설명합니다.
샘플러 상태 개체를 만들려면 createSamplerState참조하세요.
성능 고려 사항
상태 개체를 사용하도록 API를 디자인하면 몇 가지 성능 이점이 있습니다. 여기에는 개체 생성 시 상태 유효성 검사, 하드웨어에서 상태 개체 캐싱 사용, 상태 설정 API 호출 중에 전달되는 상태의 양을 크게 줄이는 작업이 포함됩니다(상태 대신 상태 개체에 핸들을 전달).
이러한 성능 향상을 달성하려면 렌더링 루프 전에 애플리케이션이 시작될 때 상태 개체를 만들어야 합니다. 상태 개체는 변경할 수 없습니다. 즉, 개체가 만들어지면 변경할 수 없습니다. 대신 삭제하고 다시 만들어야 합니다. 이 제한에 대처하기 위해 각 유형의 상태 개체를 최대 4096개까지 만들 수 있습니다. 예를 들어 다양한 샘플러 상태 조합을 사용하여 여러 샘플러 개체를 만들 수 있습니다. 그런 다음 샘플러 상태가 아닌 개체에 핸들을 전달하는 적절한 Set API를 호출하여 샘플러 상태를 변경합니다. 이렇게 하면 호출 수와 데이터 양이 크게 감소하기 때문에 각 렌더링 프레임에서 상태 변경을 위한 오버헤드 양이 크게 줄어듭니다.
또는 애플리케이션에 대한 상태 개체의 효율적인 생성 및 소멸을 자동으로 관리하는 효과 시스템을 사용하도록 선택할 수 있습니다.
관련 항목