공부/Graphics, DirectX, 포트폴리오 구조

ID3D11DeviceContext::Map 상황별 사용

sudo 2022. 5. 29. 15:57

GPU에서 쓴 정보를 CPU로 가져와서 읽을 때 Map

// (GPU에서 써준)구조화 버퍼에 있는 본 정보 m_BoneBuffer를 m_BoneDataBuffer로 복사한다.
CDevice::GetInst()->GetContext()->CopyResource(m_BoneDataBuffer, m_BoneBuffer->GetBuffer());

D3D11_MAPPED_SUBRESOURCE	Map = {};

// D3D11_MAP타입의 3번째 인자는 D3D11_MAP_READ로
CDevice::GetInst()->GetContext()->Map(m_BoneDataBuffer->GetBuffer(), 0, D3D11_MAP_READ, 0, &Map);

// m_vecBoneMatrix로 복사
memcpy(&m_vecBoneMatrix[0], Map.pData, sizeof(Matrix)* m_vecBoneMatrix.size());;

CDevice::GetInst()->GetContext()->Unmap(m_BoneBuffer->GetBuffer(), 0);

 

CPU에서 쓴 정보를 GPU로 보낼 때

D3D11_MAPPED_SUBRESOURCE	Map = {};

// m_Buffer는 ID3D11Buffer* 타입
// D3D11_MAP타입의 3번째 인자는 D3D11_MAP_WRITE_DISCARD로
CDevice::GetInst()->GetContext()->Map(m_Buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &Map);

memcpy(Map.pData, Data, m_Size * Count);

CDevice::GetInst()->GetContext()->Unmap(m_Buffer, 0);