Por lo que entendí (al leer varias páginas) hay 2 formas de actualizar un búfer:
UpdateSubresource()
(cuando el búfer se crea con elDEFAULT
uso)Map()
, copie los datos nuevosUnmap()
(cuando se crea el búfer con elDYNAMIC
uso)
En el primer caso, ¿solo llamo a esta función (nada más)? Debido a que he visto a personas decir que mapean el búfer y luego actualizan los recursos secundarios, o tal vez los entendí mal.
Además, ¿hay alguna otra manera (lo dudo: P)? ¿Entiendo las cosas correctamente?
ID3D11ShaderResourceView * nullsrv = NULL; pCtx->PSSetShaderResources(0, 1, &nullsrv);
deshacer una textura de la ranura 0.Es posible que se hayan referido al acto real de actualizar un recurso y no a la llamada a la función real. En general, UpdateSubResource debe usarse para recursos predeterminados que no están sujetos a actualizaciones frecuentes (es decir: no todos los cuadros. En este caso, es más probable que el búfer se pueda copiar en un búfer temporal accesible desde el búfer de comandos ( debido a condiciones de carrera, por ejemplo). También te permitirá la actualización sub recursos (en texturas, por ejemplo).
Map / Unmap debe usarse cuando un recurso se va a actualizar con mucha frecuencia (es decir, cada cuadro), como algunos buffers constantes. El caso más común es cuando está sobrescribiendo todo el búfer con WriteDiscard. Hay una presentación de nVidia donde recomiendan esta práctica.
fuente