Сброс динамического буфера вершин после потери устройства - PullRequest
1 голос
/ 29 декабря 2010

Я использую динамический буфер вершин для рендеринга некоторого ландшафта. Поскольку все ресурсы, использующие флаг 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 вызывает сбой, но мне нужен способ вернуть буфер вершин, чтобы я мог его использовать.

Кстати, он вылетает, когда я изменяю размер окна или выхожу в полноэкранный режим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...