CPU对GPU的资源更新
2024-05-27
20
0
原文转自:https://blog.csdn.net/l1987021/article/details/84394522
对渲染的数据进行更新有四种方法:
CPU调用:
- ID3D11DeviceContext::Map
如果想更新GPU中的resource,可以通过map()函数来让CPU读写GPU的数据;
GPU调用:
- ID3D11DeviceContext::CopySubresourceRegion
- ID3D11DeviceContext::CopyResource
- ID3D11DeviceContext::UpdateSubresource
通过ID3D11DeviceContext::CopyResource(),ID3D11DeviceContext::UpdateSubresource()等来直接让GPU写更新它自己的resource
资源创建时都会描述资源的D3D11_USAGE 特性:
- D3D11_USAGE_DEFAULT
- D3D11_USAGE_IMMUTABLE
- D3D11_USAGE_DYNAMIC
- D3D11_USAGE_STAGING
这四种针对不同的CPU和GPU访问权限的情况
更新VertextBuffer
void IAVertexBuffer::Update(Graphics& gfx,std::vector<unsigned char>& vecVertext, UINT stride)
{
GetContext(gfx)->UpdateSubresource(m_pVertexBuffer.Get(), 0, NULL, &vecVertext[0], stride, 0);
}