D3DXFont ::のDrawTextを使用するときに、なぜ重複したテキストは、異なるテクスチャのZバッファにレンダリングされていますか?
質問
私はしばらくの間、この上でつまずくされてきたし、誰もが前に、この問題に遭遇した場合と思いまして。
私が働いているアプリケーションは、複数のデータプロットと、画面の下部にある単一のタイムラインに分かれています。 (実際には互いの上に積層複数のテクスチャである)各プロット並びにタイムラインは、別々のテクスチャにレンダリングされます。タイムラインテクスチャは、底部に画面の上部からプロットテクスチャの各々、続いて最初にレンダリングされます。私はDXUTとDirectX9の(2009年3月)を使用しています。
は、タイムラインのテクスチャに時間テキストを追加した後、私はテキストは、すべてのデータプロットのタイトルバーに繰り返されたことに気づきました。ここでは、ディスプレイの一部のSCREENCAPだ、それだけで、単一のプロットを示しているが、テキストが開かれたすべてのプロットに繰り返されます:
それはのDrawTextは、タイムラインのレンダリング機能で呼び出されているに直接接続されるように
それはそうです。 RECTはのDrawTextに渡されるように私は相対座標を使うのですが、私はすでに必要なテクスチャにレンダーターゲットを設定しているので、それだけで現在のテクスチャに影響を与える必要があります。すべてのテクスチャは、その後レンダリングされません。
誰もが今までにD3DXFontを使用してこれと同様の任意の問題に実行していますか?
編集:それはZバッファとは何かを持っているようないくつかのより多くの実験をした後、それが見えます。各テクスチャの表面に明確にD3DCLEAR_ZBUFFERを追加することで、重複したテキストがなくなっています。問題は今のバイパス思えますが、私はまだ完全に独立したテクスチャのためのZバッファが私のDrawTextコール中に書かれていた理由として興味があります。
解決
Zバッファ状態は永続的である。
たとえば、
SetDepthStencilSurface(X)
SetRenderTarget(A)
Draw()
SetRenderTarget(B)
Draw()
両方の呼び出しが同じ深度バッファを使用する描画します。
のDrawTextは、設定した深度バッファを変更していません。それはあなたがした何をするためのものを前提としています。