CPU 和GPU是可以并行工作的,如果GPU正在使用一块内存上的数据绘制,而CPU要修改这块数据,就会出现CPU等待GPU或GPU等待CPU的情况,造成资源浪费。
如果GPU在使用一块内存的时候,用D3DLOCK_DISCARD标志锁定,表示我们对原来的数据不敢兴趣了,丢弃是相对于我们来说的,GPU会分配一块新内存,用来保存我们更新的数据,这时GPU可以使用原来的内存继续绘制。
用D3DLOCK_NOOVERWRITE锁定表示,我们需要修改数据,并且仍然需要原来的数据,这时锁定GPU占用的内存会失败,并立即返回,如果不用该标志,CPU会等待GPU用完了才返回,如果锁定的内存没有被GPU占用,则会成功锁定。
一点理解仅供参考。
lock和unlock是为了CPU和GPU的同步设计的
|
| 风之翼CC Exp:49 ![]() 侦察兵 ![]() |
|
| youareeverything Exp:71 ![]() 侦察兵 ![]() |
|
| congy Exp:1065 ![]() 中士 ![]() |
|
| wjk98550328 Exp:400 ![]() 下士 ![]() |
|
本文探讨了CPU和GPU在并行工作时如何通过D3DLOCK_NOOVERWRITE和D3DLOCK_DISCARD标志实现高效的数据交换。这两种标志分别用于在修改动态缓冲区时保留或丢弃原有数据,确保渲染过程的流畅性和效率。




3143

被折叠的 条评论
为什么被折叠?



