使用D3DXFont :: DrawText时,为什么重复文本会呈现在不同纹理的Z缓冲区上?

时间:2009-08-31 19:00:39

标签: text direct3d zbuffer

我已经磕磕绊绊了一段时间,并且想知道是否有人之前遇到过这个问题。

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

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

alt text

它似乎与时间轴渲染功能中调用的DrawText直接相关。我确实使用相对坐标作为传递给DrawText的矩形,但由于我已经将渲染目标设置为所需的纹理,因此它应该只影响当前纹理。并非后来呈现的每个纹理。

有没有人使用D3DXFont遇到任何类似的问题?

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

1 个答案:

答案 0 :(得分:2)

Z缓冲区状态是持久的。

例如,

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

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

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