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

为什么在使用D3DXFont::DrawText时,会将重复文本渲染到不同纹理的Z缓冲区上?,text,direct3d,zbuffer,Text,Direct3d,Zbuffer,我已经在这个问题上犹豫了一段时间,想知道以前是否有人遇到过这个问题 我正在使用的应用程序在屏幕底部被划分为多个数据图和一个时间线。每个绘图(实际上是相互叠加的多个纹理)以及时间轴都渲染为单独的纹理。首先渲染时间线纹理,然后是从屏幕顶部到底部的每个打印纹理。我正在使用DXUT和DirectX9(2009年3月) 将时间文本添加到时间线纹理后,我注意到文本在每个数据图的标题栏中重复。这是显示部分的屏幕盖,它只显示一个绘图,但文本在每个打开的绘图上重复: 它似乎直接绑定到时间轴的渲染函数中调用的Dr

我已经在这个问题上犹豫了一段时间,想知道以前是否有人遇到过这个问题

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

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

它似乎直接绑定到时间轴的渲染函数中调用的DrawText。我确实使用相对坐标作为传递给DrawText的rect,但是因为我已经将渲染目标设置为所需的纹理,所以它应该只影响当前纹理。并不是所有的纹理都是在之后渲染的

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


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

Z缓冲区状态是持久的

比如说,

SetDepthStencilSurface(X)
SetRenderTarget(A)
Draw()
SetRenderTarget(B)
Draw()
两个绘图调用将使用相同的深度缓冲区

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