又一个bug

一帮人都被某第三方库给坑了。正式版本没问题,发过来的patch有问题。

找出问题代码的方法最后是:

设数据断点,监测一帧里面该变量的变化。有变化就打log,而且打完整的调用栈。

然后把log拿出来,正确的和不正确的一比对,哪个函数没调用就一目了然,顺藤摸瓜地查就是了。

所以很多时候解决问题需要的不是智商,更不是什么所谓的灵感。而是经验。

所以我遇到问题总不会去想问题是什么导致的,而是思考怎样获得更多的足以分析出出错之处的信息。

大部分时候这是有用的。

关于DX9的D3DUSAGE_DYNAMIC flag

正经点说。我的内网机是AMD Radeon HD 6700 series。粒子系统125个batch跟1679个batch的差别在于平均70fps和平均64fps的差别(渲染状态完全一样,区别在于我有没有强制合并batch)。而如果我把vertex buffer加上D3DUSAGE_DYNAMIC的flag,在合并了batch的状态下,帧率就会跑到40~50fps之间。
我想说的是,现代GPU对batch的敏感度比很久之前小很多,你也许不在乎这点性能损耗。但D3DUSAGE_DYNAMIC这个flag,最好不要用,它带来的性能损耗比你少合并一千个batch更大。即使你每帧都不得不lock这个buffer重填数据,即使你数据量再大,你也架不住这玩意儿绘制效率低。
只要不是每帧删了buffer重建,效率其实是可以接受的。

继续阅读关于DX9的D3DUSAGE_DYNAMIC flag