Ich versuche, Grafikprogrammierung und DirectX11 zu lernen.
Ich versuche zu lernen, wie man die Übertragung von CPU-GPU und die Grafikprogrammierung im Allgemeinen minimiert.
Ich habe eine Frage, die ich aus Online-Ressourcen nicht beantworten konnte:
Welche der D3D-Methoden sendet die Daten tatsächlich an die GPU (und bei einem statischen Netz werden ALLE Scheitelpunktdaten bei jedem Frame oder nur einmal an die GPU übergeben)?
Code folgt:
(vereinfacht für Stapelaustausch)
In meiner "Mesh" -Klasse habe ich einen Scheitelpunktpuffer:
ID3D11Buffer *m_pVBuffer;
Im Konstruktor meines Netzes habe ich einige Scheitelpunkte für den Scheitelpunktpuffer festgelegt:
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);
Dann mache ich in der "Render" -Methode meines Netzes Folgendes:
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);
Um es zu wiederholen: Werden die Daten auf die GPU hochgeladen, wenn ich den Vertex-Puffer zuordne, speichere und die Zuordnung aufhebe, oder werden sie bei jedem Aufruf von IASetVertexBuffers in jedem Frame hochgeladen?