꼭짓점 스트림 빈도 수정

꼭짓점 셰이더 버전 3.0 이상을 지원하는 디바이스용 DirectX 9.0 버전 드라이버는 꼭짓점 스트림 빈도 나누기를 구현해야 합니다. 버전 2.0 및 이전 버전의 꼭짓점 셰이더(고정 함수 포함)의 경우 꼭짓점 셰이더는 꼭짓점당 한 번 호출됩니다. 각 호출에 대해 입력 꼭짓점 레지스터는 꼭짓점 스트림의 고유한 꼭짓점 요소로 초기화됩니다. 그러나 꼭짓점 스트림 빈도 나누기를 사용하여 꼭짓점 셰이더(3.0 이상)를 호출하여 적용 가능한 입력 레지스터를 덜 빈번한 속도로 초기화할 수 있습니다.

애플리케이션이 IDirect3DDevice9::SetStreamSourceFreq 메서드를 호출하여 지정된 스트림의 빈도를 설정하는 경우 DirectX 9.0 런타임은 D3DDP2OP_SETSTREAMSOURCEFREQ 작업 코드를 사용하여 드라이버의 D3dDrawPrimitives2 함수를 호출합니다.

스트림의 빈도를 2로 설정한 후에는 드라이버가 스트림에서 데이터를 가져와서 2개 꼭짓점마다 해당 입력 꼭짓점 레지스터에 전달해야 합니다. 이 수수는 스트림의 각 요소에 영향을 줍니다.

드라이버는 다음 수식에 따라 이 제수로 꼭짓점 오프셋을 꼭짓점 버퍼로 계산합니다.

VertexOffset = VertexIndex / Divider * StreamStride + StreamOffset 

사용되는 각 꼭짓점 스트림에 대해 드라이버가 D3DDP2OP_DRAWPRIMITIVE 작업 코드를 사용하여 드라이버의 D3dDrawPrimitives2 함수를 호출하는 동안 시작 꼭짓점 값을 수신하는 경우 드라이버는 이 시작 꼭짓점 값을 빈도 제수로 나누고 수식의 결과를 계산합니다. 이 시작 꼭짓점 값은 D3DHAL_DP2DRAWPRIMITIVE 구조체의 VStart 멤버에 제공됩니다. 시작-꼭짓점 값의 다음 수식 요소는 다음과 같습니다.

VertexOffset = StartVertex / Divider + 
               VertexIndex / Divider * StreamStride + StreamOffset 

앞의 수식은 정수 나누기를 사용합니다.

애플리케이션은 IDirect3DDevice9::CreateStateBlock 메서드에 대한 호출에서 D3DSBT_VERTEXSTATE 상태 형식을 전달하여 현재 꼭짓점 상태를 캡처합니다.

드라이버는 인덱싱된 기본 형식에 대해 또는 드라이버가 버전 3.0(고정 함수 포함)보다 이전의 꼭짓점 셰이더 모델만 지원하는 경우 스트림의 주파수 수수 설정을 무시합니다.

IDirect3DDeviceXxx::SetStreamSourceFreqIDirect3DDeviceXxx::CreateStateBlock에 대한 자세한 내용은 최신 DirectX SDK 설명서를 참조하세요.