You do not need to destroy the buffer every frame. Create a dynamic buffer.
See the article Using Vertex buffers with DirectX if you havenβt already:
For dynamic vertex buffers containing information about primitives that often change in the scene, we need to specify the D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY to use and the D3DPOOL_DEFAULT flag for the pool.
Remember, however, data must still be sent to the pipeline for each update. Thus, a certain performance will be compared to static buffers with consistent data.
You should also try to keep the minimum buffer updates, as well as buffer switches. Are there many such editable polygons in your application? If so, you might consider putting them in one buffer.
Official Q / A website for graphics / game developers: https://gamedev.stackexchange.com/
Update
Sounds good to me.
Dynamic vertex buffers, on the other hand, are populated and discarded every frame.
This is taken from the article and is largely the answer for 1. and 2 .. Instead of updating individual vertices or carefully choosing which vertices should be overwritten, I would simply update the entire buffer content. A full buffer must be sent to the device anyway. You would have to check it out, though, to be sure.
Regarding 3 .. You cannot resize the buffer after it is created, but you can create a larger buffer than necessary. Therefore, try to evaluate a good supply. If the buffer is still too small, you will have to create a new one. There is no other solution for this. You have already found a possible algorithm for dynamically increasing the size of the buffer.
There are so many options when it comes to graphics performance, it is almost impossible to give specific answers. Are you already facing restrictions? If not, donβt worry. Be generous with your resources while you are still developing.