Direct3d9 のフレームごとに頂点バッファーをロックして、blendshape コードからのデータを入力します。私のシェーディングは 2 つのステップを使用するため、1 つのシェーダーで 1 回レンダリングしてから、もう 1 つのシェーダーで加算ブレンドを描画します。
私以外の理由で、頂点バッファーのデータは、これら 2 つの描画呼び出しの間で (明らかに) わずかに異なります。
これはすべて 1 つのスレッドで行われ、バッファは render が呼び出されるかなり前にロック解除されます。さらに、シェーダー命令への変更は発生しないため、データは両方の呼び出しでまったく同じである必要があります。ブレンドシェイプが変更されない場合、Z ファイティングは発生しません。
今のところ、シェーダーの深度を少し「プッシュ」していますが、これは非常に洗練されていない解決策です。
このデータが変更される理由 バッファーのロックを解除した後、DirectX がバッファー内のデータを変更するのはなぜですか? 変更しないように強制できますか?