假設我需要渲染靜態圖片(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