C++ 使用D3DUSAGE_动态标志时DirectX 9顶点缓冲区崩溃程序

C++ 使用D3DUSAGE_动态标志时DirectX 9顶点缓冲区崩溃程序,c++,directx-9,vertex-buffer,C++,Directx 9,Vertex Buffer,我有以下代码: DirectX::device->CreateVertexBuffer(sizeof(VERTEX) * vertexCount, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, VERTEXFORMAT, D3DPOOL_MANAGED, &vertexBuffer, NULL); VOID* vertexLocking; vertexBuffer->Lock(0, 0, (void**)&vertexLocking,

我有以下代码:

DirectX::device->CreateVertexBuffer(sizeof(VERTEX) * vertexCount, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, VERTEXFORMAT, D3DPOOL_MANAGED, &vertexBuffer, NULL);

VOID* vertexLocking;
vertexBuffer->Lock(0, 0, (void**)&vertexLocking, 0);
memcpy(vertexLocking, vertices, sizeof(VERTEX) * vertexCount);
vertexBuffer->Unlock();
问题是程序不断破坏顶点缓冲区的Lock()函数。我得到的错误是“访问冲突”。但问题是,如果我把
0
放在标志中,这样做效果很好


因为我想改变缓冲区顶点的位置,所以我尝试将其更改为
D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY
,现在它停止工作了。我不知道为什么。请帮助

D3DUSAGE\u DYNAMIC和D3DUSAGE\u WRITEONLY冲突。它们指示在内存中放置顶点缓冲区的位置。最可能的情况是,当您锁定并尝试访问内存时,它不知道要访问哪里

我通常对我将要频繁修改的缓冲区使用DYNAMIC。只带上那面旗子,看看这对你是否有帮助


我发现了问题所在:因为我使用的是D3DUSAGE|U DYNAMIC |
D3DUSAGE|U WRITEONLY
,所以它不能与D3DPOOL|U一起使用。我把它切换到D3DPOOL_默认值,它工作了