使用D3D USAGE DYNAMIC标志时,DirectX 9 Vertex Buffer会崩溃程序

时间:2014-01-14 21:59:09

标签: 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, 0);
memcpy(vertexLocking, vertices, sizeof(VERTEX) * vertexCount);
vertexBuffer->Unlock();

问题是程序在顶点缓冲区的Lock()函数上不断打破。我得到的错误是“访问冲突”。但是,如果我将0放入旗帜中,那么事情就好了。

因为我希望缓冲区的顶点位置发生变化,所以我尝试将其更改为D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY,现在它已停止工作。我不知道为什么。请帮忙

2 个答案:

答案 0 :(得分:1)

我发现了问题所在:因为我正在使用D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY,它与D3DPOOL_MANAGED不起作用。我将它切换到D3DPOOL_DEFAULT并且有效。

答案 1 :(得分:0)

D3DUSAGE_DYNAMIC和D3DUSAGE_WRITEONLY存在冲突。它们指示将顶点缓冲区放在内存中的位置。最有可能当你锁定并尝试访问内存时,它不知道在哪里访问。

我经常将DYNAMIC用于我要经常修改的缓冲区。只使用那个标志,看看这对你有所帮助。

MSDN link for usage flag descriptions