グラフィックプログラミングとDirectX11を学ぼうとしています。
CPU-GPU転送とグラフィックプログラミング全般を最小限に抑える方法を学びたいと思っています。
オンラインリソースから自分に答えることができなかったという質問があります。
実際にデータをGPUに送信するD3Dメソッドはどれですか(同等に、静的メッシュの場合、すべての頂点データがフレームごとに、または1回だけGPUに渡されますか)。
コードは次のとおりです:
(stackexchangeの簡略化)
私の「メッシュ」クラスには、頂点バッファーがあります。
ID3D11Buffer *m_pVBuffer;
メッシュのコンストラクターで、いくつかの頂点を頂点バッファーに設定します。
D3D11_MAPPED_SUBRESOURCE ms;
devcon->Map(m_pVBuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms);
memcpy(ms.pData, &vertices[0], sizeof(VERTEX) * vertices.size());
devcon->Unmap(m_pVBuffer, NULL);
次に、メッシュの「レンダリング」メソッドでこれを行います。
UINT stride = sizeof(VERTEX);
UINT offset = 0;
devcon->IASetVertexBuffers(0, 1, &m_pVBuffer, &stride, &offset);
devcon->IASetIndexBuffer(m_pIBuffer, DXGI_FORMAT_R32_UINT, 0);
devcon->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
devcon->DrawIndexed(m_num_indices, 0, 0);
繰り返します:データをGPUにアップロードするのは、頂点バッファーをマップ、memcpy、およびマップ解除するときですか、それともIASetVertexBuffersを呼び出すときにフレームごとにアップロードされますか?