2017-07-11 50 views
1

我想爲desc.ByteWidth創建一個變體大小的頂點緩衝區,如下所示。這個怎麼做? 非常感謝。在DirectX11的創建一個具有變體大小的頂點緩衝區

D3D11_BUFFER_DESC desc; 
ZeroMemory(&desc, sizeof(desc));`enter code here` 
desc.Usage = D3D11_USAGE_DYNAMIC; 
desc.ByteWidth = size;//make it variant 
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; 
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; 
d3dDevice->CreateBuffer(&desc, initialVertexData, &vertexBuffer); 
+0

請清楚解釋您遇到的問題。你期望什麼,發生了什麼?什麼不起作用? –

回答

0

緩衝區大小和說明被固定在創建時,這意味着如果你需要任何更新這些參數(尺寸/使用)的,你需要釋放這個緩衝區,並創建一個新的。

但是,如果你要上傳數據的動態量,你可以創建一個緩衝區「足夠大」,只有通過Map功能上傳的一部分(如您的緩衝區是動態的,你這樣做。

這是完全允許只填寫的這個一小部分,然後使用僅使用數據子集的繪製函數。

例如,使用Draw功能。

如果緩衝區大小對於32個頂點,您仍然可以使用:

devicecontext.Draw(5, 0); 

這將只繪製前5個頂點,而不管總大小。