静止画像 (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 が自動的に破棄されます。問題は、すべてのバッファ リソースをクリアするだけで十分かということです。または、メモリを解放するために追加の手順を実行する必要がありますか?