そのため、私は自分のレンダリングエンジンで作業していて、奇妙なメモリ動作に遭遇しました。
私が電話するときはいつでも
IDXGISwapChain::Present(0, 0)
そのフレームをレンダリングした頂点のサイズだけ、プログラムのメモリ使用量が増加します。
このコードを使用して頂点バッファーを作成します。
ID3D10Buffer *pVertexBuffer;
D3D10_BUFFER_DESC desc;
desc.Usage = D3D10_USAGE_DYNAMIC;
desc.ByteWidth = stride * nNumVertices;
desc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
desc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE;
desc.MiscFlags = 0;
D3D10_SUBRESOURCE_DATA vData;
vData.pSysMem = Vertices;
HRESULT hr = m_pDevice->CreateBuffer(&desc, &vData, &pVertexBuffer);
を使用して描画します
m_pDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
m_pDevice->IASetVertexBuffers(0, 1, &pVertexBuffer, &stride, &offset);
m_pDevice->Draw(nNumVertices, 0);
そしてそれを解放します
pVertexBuffer->Release();
これはエラーをスローします
D3D10 INFO: ID3D10Device::IASetVertexBuffers: A currently bound VertexBuffer is being deleted; so naturally, will no longer be bound. [ STATE_SETTING INFO #31: IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT]
しかし、MSDNやその他の質問によると、これは問題にはならないはずです。
他の誰かがこれを以前に経験したことがありますか、または私に助けを与えることができますか?
編集1:
これは、メモリの使用を停止した後、特定の回数、約500回発生します。次にメッシュをアンロードしてリロードすると(ポインターが異なるため)、present()はメッシュのサイズであるメモリの割り当てを約500回開始します。これは、プログラムのメモリがなくなるまで続きます。
追加することの1つは、Present()を初めて呼び出すときに、バインドしたテクスチャのサイズだけ使用メモリを増やします。これには、バックバッファが含まれます。