DEFAULT
GPU가 이 리소스를 빠르게 읽기 및 쓰기 권한이 가능하다.
오직 UpdateSubresource만을 사용하여 업데이트 할 수 있다.
렌더타겟에서 사용될때 좋은 후보가 될수있다 =>무슨말?
IMMUTABLE
GPU만이 이 리소스를 빠르게 읽을 수 있다.
일단 생성되면 업데이트할 수 없습니다.
생성 호출 중에 초기 데이터를 전달해야 합니다.
변하지 않는 리소스(정적 텍스처, Vb/Ib)에 좋은 후보가 될 수 있습니다.
Vb/Ib : VertexBuffer, IndexBuffer
모든것을 IMMUTABLE로 만들려 애쓰지 마라
DYNAMIC
빠른 CPU 쓰기 액세스가 필요한 리소스에 사용
(GPU 읽기 액세스 속도가 느려짐)
CPU 읽기 액세스 없음
밑의 두가지 플래그와 Map을 사용하여만 업데이트할 수 있습니다.
- D3D10_MAP_WRITE_DISCARE
- D3D10_MAP_WRITE_DNO_OVERWRITE
동적 텍스처, 동적 VertexBuffer는 좋은 후보입니다.
STAGING
GPU에서 데이터를 다시 읽을 수 있는 유일한 방법입니다.
MAP을 사용해야만 업데이트할 수 있습니다.
단 밑의 플래그와는 매핑할 수 없음
- D3D11_MAP_WRITE_DISCARD
- D3D11_MAP_WRITE_NO_OVERWRITE
gpu가 지연되지 않도록 버퍼를 두 배로 늘릴 수 있습니다.
GPU는 이것들을 직접 사용할 수 없다.
Vertex Buffer의 경우
버텍스 버퍼가 프레임당 한 번 미만의 CPU에 의해 터치됨
=> D3D11_USAGE_DEFAULT로 생성하여 UpdateSubresource를 사용하여 업데이트 해라
정점 버퍼는 동적 지오메트리에 사용되며 CPU에서 프레임당 여러 번 업데이트할 필요가 있는 경우
=> D3D11_USAGE_DYNAMIC으로 생성하여 MAP을 통해 업데이트 해라
사용하면서 내 경험으로 더 알아가면서 추가로 포스팅해야겠다.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=masca140&logNo=220719096462
'DirectX 11 > 개념 정리' 카테고리의 다른 글
동차 표기법 (Homogeneous) (0) | 2022.02.09 |
---|---|
Vertex Shader, Pixel Shader, Rasterizer (0) | 2022.02.07 |
Device & Device Context / COM객체 (0) | 2022.02.06 |