创建具有不同大小的顶点缓冲区

Create a vertex buffer with a variant size

我想为 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 );

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

然而,如果你想上传动态数量的数据,你可以创建一个缓冲区 "big enough" ,并且只上传它的一部分(因为你的缓冲区是动态的,你可以通过 Map 函数。

完全可以只填充其中的一小部分,然后使用只使用数据子集的绘制函数。

例如,使用Draw函数。

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

 devicecontext.Draw(5, 0);

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