Я использую динамический буфер вершин для рендеринга некоторого ландшафта. Поскольку все ресурсы, использующие флаг D3DPOOL_DEFAULT
, должны быть освобождены, прежде чем вы сможете сбросить настройки устройства, у меня есть метод, который заботится о вызове функции Release
в моем буфере вершин.
Дело в том, что мой буфер больше не может быть использован, так как он был освобожден, и вызов CreateVertexBuffer
для его воссоздания после перезагрузки устройства вызывает сбой моего приложения.
Как я могу восстановить свой буфер вершин после перезагрузки устройства?
Я также заметил, что после освобождения буфера я все еще могу его использовать, хотя после освобождения указателя я устанавливаю в 0.
Вот код, который я использую:
Прежде чем я вызову Reset
на устройстве D3D, я звоню onLostDevice
для всех ресурсов, которые должны быть освобождены:
void Water::onLostDevice()
{
this->mVertexBuffer->Release();
this->mVertexBuffer = 0;
}
И после того, как на устройстве был вызван Reset
, я вызываю onResetDevice
на всех ресурсах в пуле памяти по умолчанию:
void Water::onResetDevice(IDirect3DDevice9 *device)
{
device->CreateVertexBuffer(totalVertices * sizeof(d3df::VertexPositionColor),
D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, &mVertexBuffer, 0);
}
Вызов onResetDevice
вызывает сбой, но мне нужен способ вернуть буфер вершин, чтобы я мог его использовать.
Кстати, он вылетает, когда я изменяю размер окна или выхожу в полноэкранный режим.