Pelo que entendi (da leitura de várias páginas), existem 2 maneiras de atualizar um buffer:
UpdateSubresource()
(quando o buffer é criado com oDEFAULT
uso)Map()
, copie os novos dadosUnmap()
(quando o buffer for criado com oDYNAMIC
uso)
No primeiro caso, chamo apenas essa função (nada mais)? Porque eu vi pessoas dizerem que mapeiam o buffer e atualizam o sub-recurso, ou talvez eu as tenha entendido mal.
Também existe outra maneira (duvide: P)? Eu entendo as coisas corretamente?
ID3D11ShaderResourceView * nullsrv = NULL; pCtx->PSSetShaderResources(0, 1, &nullsrv);
a uma textura unbind de slot 0.Eles podem estar se referindo ao ato real de atualizar um recurso e não à chamada de função real. Em geral, UpdateSubResource deve ser usado para recursos padrão que não estão sujeitos a atualizações frequentes (ou seja, nem todos os quadros. Nesse caso, é mais provável que o buffer possa ser copiado para um buffer temporário acessível a partir do buffer de comando ( devido a condições de corrida, por exemplo), além de permitir a atualização de sub- recursos (em texturas, por exemplo).
Mapear / Desmapear deve ser usado quando um recurso for atualizado com muita frequência (ou seja, todos os quadros), como alguns buffers constantes. O caso mais comum é quando você está substituindo o buffer inteiro pelo WriteDiscard. Há uma apresentação da nVidia em que eles recomendam essa prática.
fonte