꼭짓점 버퍼의 내용에 액세스(Direct3D 9)
꼭짓점 버퍼 개체를 사용하면 애플리케이션이 꼭짓점 데이터에 할당된 메모리에 직접 액세스할 수 있습니다. IDirect3DVertexBuffer9::Lock 메서드를 호출한 다음 필요에 따라 메모리에 액세스하여 버퍼를 새 꼭짓점 데이터로 채우거나 이미 포함된 데이터를 읽어 꼭짓점 버퍼 메모리에 대한 포인터를 검색할 수 있습니다. IDirect3DVertexBuffer9::Lock 메서드는 네 개의 매개 변수를 허용합니다. 첫 번째 OffsetToLock은 꼭짓점 데이터에 대한 오프셋입니다. 두 번째 매개 변수는 꼭짓점 데이터의 크기(바이트)입니다. 허용되는 세 번째 매개 변수는 호출이 성공하는 경우 꼭짓점 데이터를 가리키는 포인터의 주소입니다.
마지막 매개 변수인 Flags는 메모리를 잠글 방법을 시스템에 알려줍니다. 꼭짓점 데이터에 액세스하는 방식에 따라 Flags 매개 변수에 상수를 지정합니다. D3DUSAGE에 대해 선택한 값이 D3DLOCK에 대해 선택한 값과 일치하는지 확인합니다. 예를 들어 쓰기 권한만 있는 꼭짓점 버퍼를 만드는 경우 D3DLOCK_READONLY 지정하여 데이터를 읽는 것은 의미가 없습니다. 이러한 플래그를 현명하게 사용하면 요청된 액세스 유형에 따라 드라이버가 메모리를 잠그고 최상의 성능을 제공할 수 있습니다.
꼭짓점 데이터를 채우거나 읽은 후 다음 코드 예제와 같이 IDirect3DVertexBuffer9::Unlock 메서드를 호출합니다.
// This code example assumes the g_pVB is a variable of type
// LPDIRECT3DVERTEXBUFFER9 and that g_Vertices has been
// properly initialized with vertices
// Lock the buffer to gain access to the vertices
VOID* pVertices;
if(FAILED(g_pVB->Lock(0, sizeof(g_Vertices),
(BYTE**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy(pVertices, g_Vertices, sizeof(g_Vertices));
g_pVB->Unlock();
D3DUSAGE_WRITEONLY 플래그를 사용하여 꼭짓점 버퍼를 만드는 경우 D3DLOCK_READONLY 잠금 플래그를 사용하지 마세요. 애플리케이션이 꼭짓점 버퍼 메모리에서만 읽는 경우 D3DLOCK_READONLY 플래그를 사용합니다. 이 플래그를 포함하면 Direct3D는 메모리에 대한 액세스가 읽기 전용이라는 점을 감안할 때 내부 프로시저를 최적화하여 효율성을 향상시킬 수 있습니다.
IDirect3DVertexBuffer9::Lock의 Flags 매개 변수에 D3DLOCK_DISCARD 또는 D3DLOCK_NOOVERWRITE 사용하는 방법에 대한 자세한 내용은 동적 꼭짓점 및 인덱스 버퍼 사용을 참조하세요.
C++에서는 꼭짓점 버퍼에 할당된 메모리에 직접 액세스하므로 애플리케이션이 할당된 메모리에 제대로 액세스하는지 확인합니다. 그렇지 않으면 해당 메모리를 유효하지 않게 렌더링할 위험이 있습니다. 애플리케이션이 할당된 버퍼의 한 꼭짓점에서 다른 꼭짓점으로 이동하는 데 사용하는 꼭짓점 형식의 보폭을 사용합니다. 꼭짓점 버퍼 메모리는 FVF에 지정된 간단한 꼭짓점 배열입니다. 정의한 꼭짓점 형식 구조체의 보폭을 사용합니다. 꼭짓점 버퍼 설명에 포함된 D3DFVF 를 검사하여 런타임에 각 꼭짓점의 보폭을 계산할 수 있습니다. 다음 표에서는 각 꼭짓점 구성 요소의 크기를 보여줍니다.
꼭짓점 형식 플래그 | 크기 |
---|---|
D3DFVF_DIFFUSE | sizeof(DWORD) |
D3DFVF_NORMAL | sizeof(float) x 3 |
D3DFVF_SPECULAR | sizeof(DWORD) |
D3DFVF_TEXn | sizeof(float) x n |
D3DFVF_XYZ | sizeof(float) x 3 |
D3DFVF_XYZRHW | sizeof(float) x 4 |
꼭짓점 형식에 있는 텍스처 좌표의 수는 D3DFVF_TEX n 플래그(여기서 n은 0에서 8까지의 값)로 설명됩니다. 텍스처 좌표 집합의 수를 1개에서 4개의 부동 소수점까지의 텍스처 좌표 집합의 크기에 곱하여 해당 텍스처 좌표 수에 필요한 메모리를 계산합니다.
특정 꼭짓점 액세스에 필요한 경우 총 꼭짓점 보폭을 사용하여 메모리 포인터를 증가시키고 감소합니다.
꼭짓점 버퍼 설명 검색
IDirect3DVertexBuffer9::GetDesc 메서드를 호출하여 꼭짓점 버퍼에 대한 정보를 검색할 수 있습니다. 이 메서드는 D3DVERTEXBUFFER_DESC 구조체의 멤버를 꼭짓점 버퍼에 대한 정보로 채웁니다.
관련 항목