-
Lock()Programing/DirectX 2008. 1. 26. 20:49
버텍스 버퍼 메모리에 접근하기 위해서는 일단 해당 메모리 영역을 잠궈야 한다.(Lock)
사용이 끝나면 반드시 닫아 주어야 한다.(unLock)
HRESULT Lock(
UINT OffsetToLock,
UINT SizeToLock,
VOID ** ppbData,
DWORD Flags );
OffsetToLock : 잠금을 시작할 버퍼 위치의 오프셋
SizeToLock : 잠글 바이트의 수
ppbData : 잠근 메모리의 시작을 가리키는 포인터(해당 포인터로 시작지점을 가져온다)
Flags : 잠금을 이루는 방법, 보통 0을 사용하나 다음과 같은 플래그들이 있다.
- D3DLOCK_DISCARD
: 동적 버퍼에만 이용할 수 있다.
: 하드웨어에게 버퍼를 버리도록 지시하고 새로 할당된 버퍼의 포인터를 리턴한다.
: 새로 할당된 버퍼에 접근하면서도 버려진 버퍼에서 렌더링을 수행할 수 있도록 해준다.
: 하드웨어 지연을 막는데 도움이 되는 플래그- D3DLOCK_NOOVERWRITE
: 동적 버퍼에만 이용할 수 있다.
: 버퍼에 데이터를 추가하는 작업만 가능하도록 한다.
: 현재 렌더링 중인 메모리를 덮어 쓸 수 없게 된다.
: 새 데이터를 추가하는 동안에도 렌더링을 계속할 수 있도록 해 준다.- D3DLOCK_READONLY
: 읽기 전용.
: 내부적인 최적화를 가능하게 해준다.
아래와 같은 예로 사용된다.
if (FAILED(g_pVB->Lock(0, sizeof(vertices),(void**)&pVertices,0)))
return E_FAIL;
memcpy(pVertices, vertices, sizeof(vertices));
g_pVB->Unlock();
'Programing > DirectX' 카테고리의 다른 글
자주 사용하는 API 함수 (1) 2008.02.16 ID3DXSprite 사용하기 (1) 2008.02.13 D3DXCreateTextureFromFileEx 함수 (0) 2008.01.30 DrawPrimitive, DrawIndexedPrimitive, DrawPrimitiveUP, DrawIndexedPrimitiveUP (1) 2008.01.28 렌더링 파이프라인 (0) 2008.01.27 버텍스 렌더링 하기 (0) 2008.01.26 CreateVertexBuffer 메서드 (0) 2008.01.26 CreateWindow() 함수 (0) 2008.01.25 WNDCLASSEX 구조체 (0) 2008.01.25 VS2005 에서 DirectX 9 AppWizard 만들기 (0) 2008.01.09