我用我的 blendshape 代码中的数据锁定并填充 Direct3d9 中的每一帧的顶点缓冲区。我的着色使用两个步骤,所以我用一个着色器渲染一次,然后用我的另一个着色器绘制一个加法混合。
出于我以外的原因,我的顶点缓冲区中的数据(显然)在这两个绘图调用之间略有不同,因为我有闪烁的 z-fighting,其中第二遍有时会在第一遍渲染“后面”。
这一切都在一个线程中完成,并且缓冲区在渲染调用之前很长时间被解锁。此外,不会对任何着色器指令进行任何更改,因此两次调用中的数据应该完全相同。如果 blendshape 碰巧没有改变,则不会发生 z-fighting。
现在我在我的着色器中“推动”一点深度,但这是一个非常不雅的解决方案。
为什么这些数据会被改变?为什么 DirectX 会在我解锁缓冲区后更改缓冲区中的数据?我可以强迫它不改变它吗?