我正在使用动态顶点缓冲区渲染一些地形。由于在重置设备之前需要释放所有使用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
调用导致崩溃,但我确实需要一种方法来恢复我的顶点缓冲区,以便我可以使用它。
顺便说一句,当我调整窗口大小或全屏时,它会崩溃。