0

我已经为此绊倒了一段时间,想知道是否有人以前遇到过这个问题。

我正在处理的应用程序分为多个数据图和屏幕底部的单个时间线。每个绘图(实际上是多个相互叠加的纹理)以及时间线都被渲染为单独的纹理。首先渲染时间线纹理,然后是从屏幕顶部到底部的每个绘图纹理。我正在使用 DXUT 和 DirectX9(2009 年 3 月)。

将时间文本添加到时间线纹理后,我注意到文本在每个数据图的标题栏中重复出现。这是显示部分的屏幕截图,它只显示一个图,但文本在每个打开的图上重复:

替代文字

似乎它直接与在时间轴的渲染函数中调用的 DrawText 相关联。我确实使用相对坐标作为传递给 DrawText 的矩形,但由于我已经将渲染目标设置为所需的纹理,它应该只影响当前纹理。不是之后渲染的每个纹理。

有没有人在使用 D3DXFont 时遇到过类似的问题?

编辑:经过更多实验,看起来它与 Z 缓冲区有关。通过将 D3DCLEAR_ZBUFFER 添加到每个纹理表面上的清除,重复的文本就消失了。虽然这个问题现在似乎被绕过了,但我仍然很好奇为什么在我的 DrawText 调用期间要写入一个完全独立的纹理的 Z 缓冲区。

4

1 回答 1

2

Z 缓冲区状态是持久的。

例如,

SetDepthStencilSurface(X)
SetRenderTarget(A)
Draw()
SetRenderTarget(B)
Draw()

两个 Draw 调用都将使用相同的深度缓冲区。

DrawText 不会更改您设置的深度缓冲区。它假设你打算做你所做的。

于 2009-09-01T20:19:01.890 回答