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