我需要在Direct3D 9中渲染一些CPU生成的图像,而且我不确定将纹理数据放到显卡上的最佳方式,因为似乎有很多方法。更新Direct3D纹理的最佳方式
我的使用路径大致如下变为每帧
- 渲染与纹理
- 更新纹理的几部分(其可以已经使用由先前绘制)一堆东西
- 渲染一些更多的东西与纹理
- 更新纹理的另一部分
- 等
我想到了一些方法来做到这一点,但我不确定哪一个去。我曾考虑过对每种方法进行基准测试,但是我无法知道所获得的结果是否代表硬件,或者只是我的硬件。
- 哪个池最适合此任务的纹理?
- 什么是更新此纹理的最佳方式?
- 呼叫LockRect和UnlockRect每个我需要更新
- 呼叫LockRect和UnlockRect整个质地
- 呼叫LockRect和UnlockRect与D3DLOCK_DISCARD整个纹理,并从RAM中的位图复制区域。
- 创建一个完全新的纹理每次我需要“更新”
- 使用1,2或3,从这个表面
- 同更新D3DPOOL_SYSMEM表面,然后UpdateSurface更新我的质感0级5但指定RECT覆盖整个区域,我需要
- 同5,但多次调用,一个是我更新
- 也许另一种方式来做到这一点我还没有考虑过的每个区域...
需要注意的是,与整个纹理的大小相比,我正在更新的区域通常相当小,例如纹理可能是1024 * 1024,我可能需要更新5个或更多64 * 64区域。