创建具有变体大小的顶点缓冲区

时间:2017-07-11 00:32:41

标签: directx-11

我想为desc.ByteWidth创建一个变量大小的顶点缓冲区,如下所示。这该怎么做? 非常感谢。

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 );

1 个答案:

答案 0 :(得分:0)

DirectX11中的缓冲区大小和描述在创建时固定,这意味着如果您需要更新任何这些参数(大小/用法),则需要释放此缓冲区并创建一个新缓冲区。

但是,如果你想上传动态数据量,你可以创建一个“足够大”的缓冲区,并且只上传部分缓冲区(因为你的缓冲区是动态的,你可以通过Map函数来完成。

完全允许只填充其中的一小部分,然后使用仅使用数据子集的绘图功能。

例如,使用Draw函数。

如果缓冲区大小适用于32个顶点,您仍然可以使用:

 devicecontext.Draw(5, 0);

这将只绘制前5个顶点,无论总大小如何。