Programing/DirectX
Lock()
챠니쓰
2008. 1. 26. 20:49
버텍스 버퍼 메모리에 접근하기 위해서는 일단 해당 메모리 영역을 잠궈야 한다.(Lock)
사용이 끝나면 반드시 닫아 주어야 한다.(unLock)
HRESULT Lock(
UINT OffsetToLock,
UINT SizeToLock,
VOID ** ppbData,
DWORD Flags );
OffsetToLock : 잠금을 시작할 버퍼 위치의 오프셋
SizeToLock : 잠글 바이트의 수
ppbData : 잠근 메모리의 시작을 가리키는 포인터(해당 포인터로 시작지점을 가져온다)
Flags : 잠금을 이루는 방법, 보통 0을 사용하나 다음과 같은 플래그들이 있다.
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();