D'après ce que j'ai compris (en lisant différentes pages), il y a 2 façons de mettre à jour un tampon:
UpdateSubresource()
(lorsque le tampon est créé avecDEFAULT
utilisation)Map()
, copiez les nouvelles données,Unmap()
(lorsque le tampon est créé avecDYNAMIC
utilisation)
Dans le premier cas, est-ce que j'appelle uniquement cette fonction (rien de plus)? Parce que j'ai vu des gens dire qu'ils mappent le tampon puis mettent à jour la sous-ressource, ou peut-être que je les ai mal compris.
Y a-t-il également un autre moyen (en douter: P)? Dois-je bien comprendre les choses?
ID3D11ShaderResourceView * nullsrv = NULL; pCtx->PSSetShaderResources(0, 1, &nullsrv);
pour délier une texture de l'emplacement 0.Ils peuvent faire référence à l'acte réel de mise à jour d'une ressource et non à l'appel de fonction réel. En général, UpdateSubResource doit être utilisé pour les ressources par défaut qui ne sont pas soumises à des mises à jour fréquentes (c'est-à-dire pas toutes les trames. Dans ce cas, il est plus probable que le tampon puisse être copié dans un tampon temporaire accessible à partir du tampon de commande ( en raison des conditions de course par exemple.) Il vous permettra également la mise à jour des sous ressources (dans les textures, par exemple).
Map / Unmap doit être utilisé lorsqu'une ressource va être mise à jour très fréquemment (c'est-à-dire chaque trame), comme certains tampons constants. Le cas le plus courant est lorsque vous écrasez tout le tampon avec WriteDiscard. Il y a une présentation nVidia où ils recommandent cette pratique.
la source