IDirect3DDevice9::CreateVertexBuffer

정점 버퍼를 생성한다.

 

Length - [in] 버퍼에 할당할 바이트 수, 8개의 정점을 보관하고 싶다면 8 * sizeof(struct vertex)로 크기를 조정한다.

정점버퍼의 크기, (ex) 한 정점에 들어가는 바이트 수가 들어 있는 변수 offset에 4를 곱하면 정점 4개에 필요한 메모리 크기가 된다.

 

Usage - [in] 버퍼가 이용되는 방법을 결정하는 특성을 지정

  • D3DUSAGE_DYNAMIC - 동적 버퍼 설정
  • D3DUSAGE_POINTS - 버퍼가 포인트 기본형으로 설정 (용책 14장 파티클 시스템), 정점 버퍼에서만 이용가능
  • D3DUSAGE_SOFTWAREPROCESSING - 정점 프로세싱을 소프트웨어로 처리
  • D3DUSAGE_WRITEONLY - 버퍼에 쓰기만을 수행할 것임을 설정, 드라이버가 쓰기 작업에 최적화된 메모리 위치로 버퍼를 이동, 이 버퍼를 읽으려 하면 오류 발생

FVF - [in] 정점 버퍼에 보관될 FVF

Pool - [in] 정점 버퍼가 저장될 메모리의 위치(그래픽 카드, 시스템 메모리)와 관리방식 지정

  • D3DPOOL_MANAGED : D3D가 알아서 관리해주는 메모리 풀 사용하겠다

ppVertexBuffer - [out, return value] 반환된 정점 버퍼를 받을 포인터

pHandle - [in] 사용 안한다, 항상 NULL로 설정한다

 

생성된 정점 버퍼는 쓰레기 값으로 가득 차있다. 정점 버퍼에 값을 넣어주어야 하는데 정점 버퍼의 주소값이 필요하다.

이 때 Lock() 함수로 해당 메모리의 주소를 얻어야 한다.

 

주의 : 정점 버퍼의 해제는 D3D 디바이스 해제 이전에 이루어져야 한다. 정점 버퍼는 D3D 디바이스를 통해 생성되었기 때문이다


IDirect3DVertexBuffer9::Lock

정점 데이터의 범위를 잠그어, 정점 버퍼 메모리의 포인터를 얻어온다.

잠금 카운트가 남아 있는 경우, DrawPrimitive 호출이 불가능하다!

(쓰레드의 Lock()을 생각하면 된다. 다른 자원에선 접근이 불가능하다)

이후 획득한 메모리 포인터에 선언한 정점을 memcpy()로 복사한다.

다 끝난 이후엔 Unlock()으로 버퍼 잠금을 해제한다

gpgstudy.com/forum/viewtopic.php?t=5173

 

버텍스 버퍼에 lock / unlock 은 왜 매번 거는거죠? - GpgStudy 포럼

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다. 운영자: 류광 비회원 전체글 글쓴이: 비회원 » 2005-02-23 03:39 음.... 안녕하세요^_^ (일단 인사부터 ^^ ; ) 예전부터 궁금하던것�

gpgstudy.com


IDirect3DDevice9::CreateVertexBuffer

인덱스 버퍼를 생성한다

 

 

 

sizeof(short) * 6 : 인덱스 버퍼의 크기(바이트 수), 16비트 인덱스를 6개 사용하겠다

0 : 특별한 용도로 사용하는건 아니다

D3DFMT_INDEX16 : 각 색인은 16비트이다

D3DPOOL_MANAGED : D3D가 알아서 관리해주는 메모리 풀을 사용하겠다

gpFullscreenQuadIB : 새로 생성된 인덱스 버퍼를 저장할 포인터

NULL : 반드시 NULL이어야 한다

 

 

 

hanjuho.tistory.com/6

 

버텍스 버퍼 3편[사용]

전편에서 정점 버퍼를 생성했으니 이제 값을 넣어야 한다. 정점 버퍼를 생성하고 정점값을 채워넣는다. 정점 버퍼란 기본적으로 정점 정보를 갖고 있는 메모리 블록이다. 정점 버퍼를 생성한 다

hanjuho.tistory.com

openhead.tistory.com/entry/Direct-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EB%B2%84%ED%8D%BC-%EC%B4%88%EA%B8%B0%ED%99%94-Index-Buffer

 

Direct 인덱스 버퍼 초기화 ( Index Buffer )

인덱스와 버텍스의 기본은 2013/11/12 - [Direct 3D 9/기초 용어] - Direct 기본 용어 정리 Vertex 와 Index | Polygon 정점(Vertex) 초기화는 2013/12/09 - [Direct 3D 9/초기화] - Direct 정점 버퍼 초기화 새로..

openhead.tistory.com

 

'그래픽스 > Dx 9' 카테고리의 다른 글

Direct X - 정점 선언  (0) 2020.09.16
Direct X 9 - 셰이더(Effect)  (0) 2020.09.16
Direct X 9 - 함수  (0) 2020.09.15

+ Recent posts