Ma *_* Sa 3 directx buffer direct3d vertex
我有一个关于顶点缓冲区的问题.如何从D3D11中的顶点缓冲区读取顶点?我想获得一个特定顶点的计算位置,如果这种方法错了,怎么会这样做呢?以下代码(显然)不起作用.
VERTEX* vert;
D3D11_MAPPED_SUBRESOURCE ms;
devcon->Map(pVBufferSphere, NULL, D3D11_MAP_READ, NULL, &ms);
vert = (VERTEX*) ms.pData;
devcon->Unmap(pVBufferSphere, NULL);
Run Code Online (Sandbox Code Playgroud)
谢谢.
您的代码错误的地方:
Map()),operator=()),Unmap()).取消映射后,您无法真正说出指针指向的位置.它可以指向已经分配了另一个东西的内存位置或者在你女朋友的笔记本电脑的内存中(只是开玩笑=)).您必须复制数据(全部或部分),而不是指针之间Map() Unmap():使用memcopy,for循环,任何东西.把它放在数组std::vector,BST,一切.
新人可以在这里犯的典型错误:
HRESULT返回值ID3D11DeviceContext::Map.如果map失败,它可以返回它喜欢的任何指针.取消引用此类指针会导致未定义的行为.因此,最好检查任何DirectX函数的返回值.D3D11_CPU_ACCESS_READ这意味着您还必须设置D3D11_USAGE_STAGING使用fag.我们如何通常从缓冲区读取:
ID3D11DeviceContext::CopyResource()或ID3D11DeviceContext::CopySubresourceRegion()),然后将数据复制到系统内存(memcopy()).