D3D11资源方法Release()不会释放内存

时间:2014-03-24 05:18:11

标签: c++ directx buffer release direct3d

所以,在树(处理视锥体剔除)中,我打电话给

// 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())
{}

同样的结果......

0 个答案:

没有答案