Estou tentando aprender programação gráfica e DirectX11.
Estou tentando aprender como minimizar a transferência de CPU-GPU e a programação gráfica em geral.
Tenho uma pergunta que não consegui responder a partir de recursos online:
Qual dos métodos D3D realmente envia os dados para a GPU (e, equivalentemente, para uma malha estática, TODOS os dados de vértice são transmitidos à GPU a cada quadro, ou apenas uma vez)?
Código a seguir:
(simplificado para stackexchange)
Na minha classe "mesh", tenho um buffer de vértice:
ID3D11Buffer *m_pVBuffer;
No construtor da minha malha, defino alguns vértices para o buffer de vértice:
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);
Então, no método "render" da minha malha, faço o seguinte:
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);
Para repetir: Os dados são enviados para a GPU quando mapeio, memcpy e Unmap o buffer de vértice, ou são carregados todos os quadros quando chamo IASetVertexBuffers?