【发布时间】:2011-05-31 11:52:21
【问题描述】:
假设我需要渲染静态图片(100 颗星)。 我将星数据(位置、颜色、大小)生成到 std::vector 星;
然后我创建一个用于 D3D 渲染的类,其中包含一个缓冲区:
CGalaxyMapRenderer
{
…
CComPtr<ID3D11Buffer> m_spStarBuffer;
}
在ctor中我用这种方式初始化它:
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::vector,因为它不再需要了。
问题是:
spDevice->CreateBuffer(&vertexBuffDescr, &initVertexData, &m_spStarBuffer));这种和平的代码将在哪里进行内存分配? 是图形内存还是当前进程内存?当我不再需要渲染星系地图时(例如,当我想移动到不需要星系地图的下一个级别时),我将销毁 CGalaxyMapRenderer。 dtor 中会自动销毁 m_spStarBuffer。 问题是:清除所有缓冲资源是否足够? 还是我应该做一些额外的步骤来释放内存?
【问题讨论】:
标签: c++ direct3d vertex-buffer