所以,在树(处理视锥体剔除)中,我打电话给
// in some_header.h
#define SAFE_RELEASE(x) { if ((x)) { (x)->Release(); } (x) = nullptr; }
// in ClearGeometry() inside model.cpp
SAFE_RELEASE(m_pVertexBuffer);
(实际上,我在模型方法中调用它,从树中调用。)
此命令执行100%。我已经调试了它。
缓冲区创建:
// inside loader.cpp
D3D11_BUFFER_DESC bd;
ZeroMemory(&bd, sizeof(bd));
bd.Usage = D3D11_USAGE_DEFAULT;
bd.ByteWidth = sizeof(CVertex)* pMesh->m_nVertices;
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = 0;
D3D11_SUBRESOURCE_DATA InitData;
ZeroMemory(&InitData, sizeof(InitData));
InitData.pSysMem = pVertices;
if (pMesh->m_pVertexBuffer)
{
printf("debugger don't stopped here\n");
}
V_RETURN(pD3DDevice->CreateBuffer(&bd, &InitData, &pMesh->m_pVertexBuffer));
为什么我实时发布缓冲区?
场景中的对象数量非常大,我必须实时卸载并下载部分对象(因为RAM和GPU内存不是橡胶)。
内存不会解除分配!使用过的GPU内存和RAM只会增长!
会发生什么?为什么内存不会解除分配?这么奇怪的问题...... 救命啊!
UPD
我试过了:
while (m_pVertexBuffer->Release())
{}
同样的结果......