丢失设备后重置动态顶点缓冲区

时间:2010-12-29 02:42:40

标签: c++ directx

我正在使用动态顶点缓冲区渲染一些地形。由于在重置设备之前需要释放所有使用D3DPOOL_DEFAULT标志的资源,因此我有一个方法负责调用顶点缓冲区上的Release函数。 问题是,我的缓冲区因为已被释放而不再可用,并且在设备重置后调用CreateVertexBuffer重新创建它会导致我的应用程序崩溃。 在重置设备后如何重新创建顶点缓冲区?

我也注意到在释放缓冲区之后,即使我在释放它之后将指针设置为0,我仍然可以使用它。

以下是我正在使用的代码:

在我拨打D3D设备上的Reset之前,我致电onLostDevice了解所有需要发布的资源:

void Water::onLostDevice()
{
    this->mVertexBuffer->Release();
    this->mVertexBuffer = 0;
}

在设备上调用Reset后,我在默认mem池中的所有资源上调用onResetDevice

void Water::onResetDevice(IDirect3DDevice9 *device)
{
    device->CreateVertexBuffer(totalVertices * sizeof(d3df::VertexPositionColor),
    D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, &mVertexBuffer, 0);
}

onResetDevice调用导致崩溃,但我确实需要一种方法来恢复我的顶点缓冲区,以便我可以使用它。

顺便说一句,当我调整窗口大小或全屏时,它会崩溃。

0 个答案:

没有答案