DirectX Graphics 레퍼런스 Direct3D C/C++ 레퍼런스 인터페이스 IDirect3DDevice9 CreateVertexBuffer   [목차열람] [주소복사] [슬롯비우기]
IDirect3DDevice9::CreateVertexBuffer 메서드
 
Microsoft DirectX 9.0

IDirect3DDevice9::CreateVertexBuffer 메서드


정점 버퍼를 생성 한다.

구문

HRESULT CreateVertexBuffer(      

    UINT Length,     DWORD Usage,     DWORD FVF,     D3DPOOL Pool,     IDirect3DVertexBuffer9** ppVertexBuffer,     HANDLE* pHandle );

파라미터

Length
[in] 정점 버퍼의 사이즈 (바이트 단위). 유연한 정점 포맷 (FVF) 정점 버퍼의 경우는,Length 는 적어도 1 개의 정점을 저장 할 수 있는 크기가 아니면 안되지만, 정점 사이즈의 배수일 필요는 없다. Length 는 비 FVF 버퍼에 대해서는 검증되지 않는다. 「주의」를 참조할것.
Usage
[in] 사용법은 0 으로 할 수 있다. 이 경우 사용법의 값은 설정되지 않는다. 다만, 사용법이 필요한 경우는, 1 개 또는 복수의 D3DUSAGE 정수의 편성을 사용한다. CreateVertexBuffer 내의 사용법파라미터와IDirect3D9::CreateDevice 의 동작 플래그를 합치시켜 사용하는 것을 추천한다. 상세 정보는 「주의」를 참조할것.
FVF
[in] D3DFVF 의 편성. 버퍼내의 정점의 정점 포맷을 기술하는 사용 방법의 지정자. 이 파라미터를 유효한 FVF 코드로 설정 하면, 생성 되는 정점 버퍼는 FVF 정점 버퍼가 된다 ( 「주의」를 참조). 이 파라미터를 0 (제로)으로 설정 하면, 정점 버퍼는 비 FVF 정점 버퍼가 된다.
Pool
[in] D3DPOOL 열거형의 멤버. 리소스가 배치되는 유효한 메모리 클래스를 기술한다.
ppVertexBuffer
[out, retval] 생성 된 정점 버퍼 리소스를 나타내는 IDirect3DVertexBuffer9 인터페이스의 포인터 주소.
pHandle
[in] 예약이 끝난 상태. 이 파라미터는 NULL 로 설정한다.

반환값

성공했을 경우는,D3D_OK 를 돌려준다.

실패했을 경우는, 다음의 몇개의 값을 돌려준다.

D3DERR_INVALIDCALL메서드의 호출이 무효이다. 예를 들어, 메서드의 파라미터에 무효인 값이 설정되어 있는 경우 등이다.
D3DERR_OUTOFVIDEOMEMORYMicrosoft® Direct3D® 가 처리를 실시하는데 충분한 디스플레이 메모리가 없다.
E_OUTOFMEMORYDirect3D 가 호출을 완료하기 위한 충분한 메모리를 할당할 수가 없었다.


주의

정점 버퍼는, 하드웨어 정점 처리에서도 소프트웨어 정점 처리에서도 사용할 수 있다. 이것은, 장치와 정점 버퍼의 생성 방법에 따라 정해진다.

장치를 생성 할 때CreateDevice 는 동작 플래그를 사용해, 하드웨어와 소프트웨어의 어디에서 정점을 처리할까 결정한다. 설정 방법법은 3 개 있다.

믹스 모드의 장치에서는, 장치의 생성 후에, 소프트웨어와 하드웨어 처리의 변환이 필요한 경우가 있다. 그 경우는,IDirect3DDevice9::SetRenderState 를 사용해 D3DRS_SOFTWAREVERTEXPROCESSING 렌더링 스테이트를 설정하는 것.

정점 버퍼를 생성 할 때CreateVertexBuffer 는 사용법파라미터를 사용해, 하드웨어와 소프트웨어의 어디에서 정점을 처리할까 결정한다.

정점 버퍼를 믹스 모드 장치로 사용하려면 , 하드웨어 처리와 소프트웨어 처리의 양쪽 모두로 사용할 수 있는 단일의 정점 버퍼를 생성 한다. 현재의 정점 버퍼를 설정하려면 ,IDirect3DDevice9::SetStreamSource 를 사용해, 장치의 동작을 합치시키기 위해서(때문에) 변경할 필요가 있는 경우는,IDirect3DDevice9::SetRenderState 를 사용한다. 정점 버퍼의 사용 방법은 장치의 동작과 일치시키는 것을 추천한다. 소프트웨어 처리용으로 생성 한 정점 버퍼는, 비디오 메모리에 둘 수 없다.

IDirect3DDevice9 인터페이스는, 정점 버퍼 개체에 저장 한 정점 데이터를 사용하는 기본도형의 렌더링을 지원 하고 있다. 정점 버퍼는 IDirect3DDevice9 인터페이스로부터 생성 되어 정점 버퍼의 기본으로 되어 있는 IDirect3DDevice9 개체에서만 사용할 수 있다.

FVF 파라미터에 제로 이외의 값을 설정 할 때는, 유효한 FVF 코드가 아니면 안되어, 이것은 버퍼의 내용이 FVF 코드에 의해 특징지울 수 있는 것을 나타내고 있다. FVF 코드로 생성 된 정점 버퍼는, FVF 정점 버퍼라고 부른다. 더 자세한 정보는, 「FVF 정점 버퍼」를 참조할것.

비 FVF 버퍼를 사용해, 멀티 패스 렌더링 또는 싱글 패스의 멀티 텍스처 렌더링으로, 데이터를 인터리브 할 수가 있다. 이것을 실시하려면 , 1 개의 버퍼에는 지오메트리 데이터를 저장 해, 이제 1 개의 버퍼에는 렌더링 하는 각 텍스처의 텍스처 좌표를 저장 한다. 렌더링시에는, 텍스처 좌표를 저장 하는 각 버퍼와 함께, 지오메트리 데이터를 저장 하는 버퍼가 인터리브 된다. 대신에 FVF 버퍼를 사용했을 경우, 각 버퍼에, 렌더링 하는 각 텍스처에 고유의 텍스처 좌표 데이터에 가세해, 같은 지오메트리 데이터를 저장 할 필요가 있다. 이것은, 스트래터지에도 밤이, 스피드 또는 메모리의 면에서 마이너스가 된다. 텍스처 좌표의 더 자세한 정보는, 「텍스처 좌표」를 참조할것.

참조

IDirect3DVertexBuffer9::GetDesc ,IDirect3DDevice9::ProcessVertices


© 2002 Microsoft Corporation. All rights reserved.
↑TOP