假设我需要渲染静态图片(100颗星)。 我生成星星数据(位置,颜色,大小)为std :: vector stars;顶点缓冲区数据的内存管理
然后,我创建了D3D渲染类,它包含一个缓冲区:
CGalaxyMapRenderer
{
…
CComPtr<ID3D11Buffer> m_spStarBuffer;
}
在构造函数初始化我它是这样的:
CGalaxyMapRenderer::CGalaxyMapRenderer(const std::vector<SStarData>& vecData)
{
…
const CD3D11_BUFFER_DESC vertexBuffDescr((UINT)(sizeof(SStarData)*stars.size()), D3D11_BIND_VERTEX_BUFFER); //Constant buffer?
D3D11_SUBRESOURCE_DATA initVertexData = {0};
initVertexData.pSysMem = &stars[0];
spDevice->CreateBuffer(&vertexBuffDescr, &initVertexData, &m_spStarBuffer);
…
}
后,我可能会破坏的std ::矢量,因为它不再需要。
的问题是:
spDevice->CreateBuffer(&vertexBuffDescr, &initVertexData, &m_spStarBuffer));
如果内存分配将发生这种和平的代码? 它是图形内存还是当前进程内存?当我不再需要渲染星系图时(例如,当我想移动到下一级时,不需要星系图),我将销毁CGalaxyMapRenderer。 dtor中会自动销毁m_spStarBuffer。 现在的问题是:是否足以清除所有的缓冲区资源? 或者我应该做一些额外的步骤,以使内存免费?
问题是关于在CreateBuffer()调用中分配内存的位置。它是否在进程内存或视频卡板载内存中? – ToughDev 2011-06-01 09:11:41
我可能是错的,但正如我在第一句中所说,它应该在进程内存中......当它们需要被渲染时,事物只会被交换到视频内存中。如果您需要http://msdn.microsoft.com/zh-cn/library/ms684884(v=vs.85).aspx,您可以使用psapi进行检查 – AJG85 2011-06-01 15:16:25