Сбой программы DirectX 9 Vertex Buffer при использовании флага D3DUSAGE_DYNAMIC
У меня есть следующий код:
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 ответа
Я выяснил, в чем проблема: потому что я использую D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY
, он не работает с D3DPOOL_MANAGED. Я переключил его на D3DPOOL_DEFAULT, и он работал.
D3DUSAGE_DYNAMIC и D3DUSAGE_WRITEONLY конфликтуют. Они указывают, где разместить буфер вершин в памяти. Скорее всего, когда вы блокируете и пытаетесь получить доступ к памяти, он не знает, куда обращаться.
Я обычно использую DYNAMIC для буферов, которые я собираюсь часто менять. Идите только с этим флагом и посмотрите, поможет ли это вам немного.