3

静止画像 (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 を破棄することがあります。

質問は次のとおりです。

  1. spDevice->CreateBuffer(&vertexBuffDescr, &initVertexData, &m_spStarBuffer)); このコードの平和のためのメモリ割り当てはどこで行われますか? それはグラフィックメモリですか、それとも現在のプロセスメモリですか?

  2. ギャラクシー マップをレンダリングする必要がなくなった場合 (たとえば、ギャラクシー マップが不要な次のレベルに移動したい場合)、CGalaxyMapRenderer を破棄します。dtor で m_spStarBuffer が自動的に破棄されます。問題は、すべてのバッファ リソースをクリアするだけで十分かということです。または、メモリを解放するために追加の手順を実行する必要がありますか?

4

1 に答える 1

2

最初の質問に関しては、プロセス ヒープ上にあるはずのグラフィック メモリは、一般的に必要な場合にのみ使用されます

m_spStarBuffer2番目の質問については、自動破棄によってそれがスマートポインターであることを意味していることを願っています。頂点バッファーを作成する簡単な例を次に示します: http://msdn.microsoft.com/en-us/library/ff476899(v=VS.85).aspx

于 2011-05-31T16:09:31.003 に答える