After some thinking, I think I found the answer, can someone confirm this?
When using D3D11_USAGE_DYNAMIC
and D3D11_CPU_ACCESS_WRITE
, the CPU will have access only for writing (ok, that is very clear). Then, on every call to ID3D11DeviceContext::Map
, a temporary buffer (something created with a _aligned_malloc
), which state is undefined.
Then, when using D3D11_MAP_WRITE_DISCARD
, the previous vertex buffer is discarded, meaning that only the parts that changed are kept, since they are present in that temporary buffer.
In other hand, while using D3D11_MAP_WRITE_NO_OVERWRITE
, the previous vertex buffer is kept and only the parts that changed are written.