버텍스 버퍼를 만들고 렌더링을 하기 위하여 아래와 같은 3단계를 거쳐야 한다.
1. 정점 정보가 담겨 있는 정점 버퍼를 출력 스트림으로 할당 (SetStreamSource 메서드 사용)
HRESULT SetStreamSource(
UINT StreamNumber,
IDirect3DVertexBuffer9 * pStreamData,
UINT OffsetInBytes,
UINT Stride
);
StreamNumber : 버텍스 버퍼를 연결할 스트림 소스를 지정, 스트림을 사용하지 않을시에 0
pStreamData : 스트림과 연결하고자 하는 버텍스 버퍼로의 포인터
OffsetInBytes : 렌더링 파이프라인으로 공급될 버텍스 데이터의 시작을 지정하는 스트림의 시작 오프셋 보통 0
Stride : 스트림에 연결하고자 하는 버텍스 버퍼 내 각 요소의 바이트 수
2. D3D에게 정정 셰이더 정보를 지정, 대부분의 경우에는 FVF만 지정한다.
3. 기하 정보를 출력하기 위한 DrawPrimitive()함수 호출HRESULT DrawPrimitive(
D3DPRIMITIVETYPE PrimitiveType,
UINT StartVertex,
UINT PrimitiveCount);
PrimitiveType : 그리고자 하는 기본형 타입 많은 종류의 타입이 있다
StartVertex : 버텍스 읽기를 시작할 버텍스 스트림 요소로의 인덱스 버텍스 버퍼내의 데이터를 일부만 그릴 수 있도록 유연성을 제공
PrimitiveCount : 그리고자 하는 기본형의 수
예를 들면 다음과 같이 사용된다.
g_pd3dDevice->SetStreamSource(0,g_pVB,0,sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0,1);
g_pd3dDevice->EndScene();
참고로 모든 렌더링 메서드가 다음과 같은 구조로 되어 있다는 것을 명심하자
_device->BeginScene();
_ device->DrawPrimitive(.....);
_device->EndScene();