我有以下代码:
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
,现在它已停止工作。我不知道为什么。请帮忙
答案 0 :(得分:1)
我发现了问题所在:因为我正在使用D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY
,它与D3DPOOL_MANAGED不起作用。我将它切换到D3DPOOL_DEFAULT并且有效。
答案 1 :(得分:0)
D3DUSAGE_DYNAMIC和D3DUSAGE_WRITEONLY存在冲突。它们指示将顶点缓冲区放在内存中的位置。最有可能当你锁定并尝试访问内存时,它不知道在哪里访问。
我经常将DYNAMIC用于我要经常修改的缓冲区。只使用那个标志,看看这对你有所帮助。