ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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();




Designed by Tistory.