Dari apa yang saya mengerti (dari membaca berbagai halaman) ada 2 cara untuk memperbarui buffer:
UpdateSubresource()
(saat buffer dibuat denganDEFAULT
penggunaan)Map()
, salin data baru,Unmap()
(saat buffer dibuat denganDYNAMIC
penggunaan)
Dalam kasus pertama, apakah saya hanya memanggil fungsi yang satu ini (tidak lebih)? Karena saya pernah melihat orang mengatakan mereka memetakan buffer dan kemudian memperbarui sub-sumber daya, atau mungkin saya salah paham.
Apakah ada cara lain (ragu: P)? Apakah saya mengerti banyak hal dengan benar?
ID3D11ShaderResourceView * nullsrv = NULL; pCtx->PSSetShaderResources(0, 1, &nullsrv);
untuk melepaskan ikatan tekstur dari slot 0.Mereka mungkin merujuk pada tindakan aktual memperbarui sumber daya dan bukan untuk panggilan fungsi yang sebenarnya. Secara umum, UpdateSubResource harus digunakan untuk sumber daya default yang tidak sering dimutakhirkan (yaitu: tidak setiap frame. Dalam hal ini, kemungkinan buffer akan disalin ke buffer sementara yang dapat diakses dari buffer perintah ( karena kondisi ras misalnya) .Ini juga akan memungkinkan Anda memperbarui sub sumber daya (dalam tekstur, misalnya).
Peta / Unmap harus digunakan ketika sumber daya akan sangat sering diperbarui (yaitu setiap frame), seperti beberapa buffer konstan. Kasus yang paling umum adalah ketika Anda menimpa seluruh buffer dengan WriteDiscard. Ada presentasi nVidia di mana mereka merekomendasikan praktik ini.
sumber