DirectX11的映射頂點顯然我有一個關於映射vertexBuffers到使用的memcpy不使用的memcpy
GPU的一些問題,這是我最初的代碼
D3D11_MAPPED_SUBRESOURCE MappedResource;
ID3D11Buffer *pBuffer = s_vertexBuffers.pBuffers[i].Get();
HRESULT hr = s_d3dContext->Map(pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource);
float *vertices = (float *) MappedResource.pData,
*data = (float *)s_vertexBuffers.pData[i];
int len = s_vertexBuffers.pStrides[i];
if (i != VERTEX_BUFFER::COLOR)
{
len *= total;
}
memcpy(vertices, data, len);
s_d3dContext->Unmap(pBuffer, 0);
什麼我要改變的是映射的方式(將數據從緩衝區複製到GPU中)使用指針(如指向here的指針)轉換爲類似於SetShaderParameters函數(也在本教程中),該指針使用指針獲取緩衝區中的數據並直接使用指針將數據複製到其中
基本上,行 float * vertices =(float *)MappedResource.pData 直到 memcpy(vertices,data,len);
將變爲像上面的教程中指出
這是我的代碼看起來像現在
VertexBuffers *dataPtr;
dataPtr = (VertexBuffers *)MappedResource.pData;
dataPtr->pBuffers[i] = s_vertexBuffers.pBuffers[i].Get();
dataPtr->pData[i] = s_vertexBuffers.pData[i];
dataPtr->pSizes[i] = s_vertexBuffers.pSizes[i];
dataPtr->pStrides[i] = s_vertexBuffers.pStrides[i];
if (i != VERTEX_BUFFER::COLOR)
{
dataPtr->pStrides[i] *= total;
}
結構VertexBuffers和VERTEX_BUFFER命名空間的內容是
namespace VERTEX_BUFFER
{
enum : int
{
POSITION,
COLOR,
TEXCOORD,
COUNT
};
}
struct VertexBuffers
{
ComPtr<ID3D11Buffer> pBuffers[VERTEX_BUFFER::COUNT];
void* pData[VERTEX_BUFFER::COUNT];
UINT pStrides[VERTEX_BUFFER::COUNT];
UINT pSizes[VERTEX_BUFFER::COUNT];
};
我認爲這個問題是每當我試圖使用指針複製數據時,我不會像memcpy一樣將len記入帳戶
由於我目前正在學習DirectX和編程,如果對我的解釋不太正確,請糾正我。
對不起,不好的代碼和糟糕的編程技巧,以及壞的英語,乾杯!
很難理解你想要做什麼。也許如果你包含一個你正在關注的教程的鏈接,它會有所幫助。 – john
http://www.rastertek.com/dx11tut05.html我將在提供的鏈接中將我的代碼轉換爲與SetShaderParameters函數類似的東西,謝謝! – nesto