티스토리 뷰
출처 : http://moople.tistory.com/100
- 메모리 풀
- 공간을 미리 할당하고 , 동적할당 요청시 할당된 공간에서 사이즈만큼 준다. 즉, 메모리 관리 매니저로 볼 수 있다.
- new와 delete할 경우 내부적으로 콜백 함수가 호출되는데, 이는 부하를 발생 시킨다.그래서, 미리 공간을 할당 받아서 콜백 함수를 한 번만 호출시켜 부하를 막아서 퍼포먼스를 높인다.
- D3DPOOL
- 열거형으로 D3D 리소스 자원들을 여러 종류의 메모리 풀에 저장한다.
- 정점들을 보관하기 위한 용도로 메모리 풀을 사용한다.
- 리소스의 타입과 이용방식에 적합한 리소스들을 메모리에 보관하도록 D3D에게 요청한다.
- 비디모 메모리, AGP메모리, 시스템 메모리 등
- 특징
- GPU는 비디모메모리에서 바로 사용이 가능하다. 시스템 메모리에 접근이 어렵다.
- 그래서 GPU는 AGP메모리에 접근하여 사용한다.
- CPU는 비디오메모리에서 바로 사용이 불가능하다. 시스템 메모리에 접근이 쉽다.
# AGP메모리
- 예약을 하고 사용하는 메모리이다.
- 갱신이 빠르다.
- 물리적 장치가 아니다.
- 속성
- D3DPOOL_DEFAULT
- 단순한 출력 용도에 적합하다.
- 메모리 풀이 비디오 메모리에 바로 생성된다. ( 메모리가 부족하면 AGP에 할당 )
메모리가 부족하면 풀을 생성할 때 오류를 뱉는다.
- 따로 백업본이 없기 때문에 디바이스 리셋시 더이상 유효하지 않는 디바이스가 된다.
- 비디오메모리가 부족하면 풀 생성이 안되는 경우가 생긴다.
- 즉, 용도에 따라 잘 선택해서 생성해야 한다.
- Lock()을 하면 임시로 시스템메모리에 할당하고 그 포인터를 반환한다. ( 많은 시간 )
- Unlock()을 하면 적절한 시점에 DMA를 통해 비디오메모리로 전송한다. ( 많은 시간 )
- 읽어내는 것 보다 쓰는 작업에 더 적합하여 인덱스/버텍스 버퍼에 주로 쓰인다.
- D3DPOOL_MANAGED
- 메모리 풀이 시스템 메모리에 백업되고 필요시 비디오 메모리에 로드 된다.
- 주로 읽기전용, 정적 버퍼로 사용하기에 좋다.
- D3DLOCK_DISCARD
- 드라이버가 잡고있는 풀을 놔두고 같은 크기의 새로운 풀을 생성하여 갱신이 가능하게 한다.
- D3DLOCK_NOOVERWRITE
- 드라이버가 잡고있는 풀을 갱신하지 않겠다는 플래그이다.
'DirectX' 카테고리의 다른 글
디바이스 로스트 (0) | 2014.11.27 |
---|---|
렌더타겟텍스쳐에 Lock을 걸때 (0) | 2014.11.13 |
셰이더 컴파일 (0) | 2014.07.31 |
D3DXVec3CatmullRom (0) | 2014.07.15 |