Nach meinem Verständnis (beim Lesen verschiedener Seiten) gibt es zwei Möglichkeiten, einen Puffer zu aktualisieren:
UpdateSubresource()
(wenn Puffer mitDEFAULT
Verwendung erstellt wird)Map()
Kopieren Sie die neuen DatenUnmap()
(wenn der Puffer mit derDYNAMIC
Verwendung erstellt wird).
Rufe ich im ersten Fall nur diese eine Funktion auf (nichts weiter)? Weil ich gesehen habe, wie Leute sagten, sie ordnen den Puffer zu und aktualisieren dann die Unterressource, oder vielleicht habe ich sie falsch verstanden.
Gibt es auch einen anderen Weg (bezweifle es: P)? Verstehe ich die Dinge richtig?
ID3D11ShaderResourceView * nullsrv = NULL; pCtx->PSSetShaderResources(0, 1, &nullsrv);
eine Textur von Steckplatz 0 lösen.Sie haben sich möglicherweise auf den tatsächlichen Vorgang des Aktualisierens einer Ressource und nicht auf den tatsächlichen Funktionsaufruf bezogen. Im Allgemeinen sollte UpdateSubResource für Standardressourcen verwendet werden, die nicht häufig aktualisiert werden (dh nicht für jeden Frame. In diesem Fall ist es wahrscheinlicher, dass der Puffer in einen temporären Puffer kopiert wird, auf den über den Befehlspuffer zugegriffen werden kann ( auf Grund der Rasse Bedingungen zum Beispiel). Es wird Ihnen auch die Update erlaubt Sub - Ressourcen (in Texturen, zum Beispiel).
Map / Unmap sollte verwendet werden, wenn eine Ressource sehr häufig aktualisiert werden soll (dh jeder Frame), z. B. einige konstante Puffer. Der häufigste Fall ist, wenn Sie den gesamten Puffer mit WriteDiscard überschreiben. Es gibt eine nVidia-Präsentation, in der sie diese Praxis empfehlen.
quelle