Почему дублирующийся текст отображается в Z-буфере другой текстуры при использовании D3DXFont::DrawText?
Вопрос
Я некоторое время спотыкался об это, и мне было интересно, сталкивался ли кто-нибудь с этой проблемой раньше.
Приложение, над которым я работаю, разделено на несколько графиков данных и единую временную шкалу в нижней части экрана.Каждый график (который на самом деле представляет собой несколько текстур, наложенных друг на друга), а также временная шкала отображаются в отдельной текстуре.Сначала визуализируется текстура временной шкалы, за которой следует каждая из текстур графика от верхней части экрана до нижней.Я использую DXUT и DirectX9 (март 2009).
После добавления текста времени в текстуру временной шкалы я заметил, что текст повторяется в строке заголовка каждого графика данных.Вот скриншот части дисплея, на нем показан только один график, но текст повторяется на каждом открытом графике:
Похоже, что это напрямую связано с DrawText, вызываемым в функции рендеринга временной шкалы.Я использую относительные координаты в качестве прямоугольника, передаваемого в DrawText, но поскольку я уже установил для цели рендеринга желаемую текстуру, это должно влиять только на текущую текстуру.Не каждая текстура отрисовывается впоследствии.
Кто-нибудь когда-нибудь сталкивался с какими-либо проблемами, подобными этой, используя D3DXFont?
Редактировать:После еще некоторых экспериментов, похоже, это как-то связано с Z-буфером.При добавлении D3DCLEAR_ZBUFFER для очистки каждой текстурной поверхности дублирующийся текст исчезает.Хотя на данный момент проблема, кажется, обойдена, мне все еще любопытно, почему Z-буфер для совершенно отдельной текстуры записывался во время моего вызова DrawText.
Решение
Состояние буфера Z является постоянным.
Например,
SetDepthStencilSurface(X)
SetRenderTarget(A)
Draw()
SetRenderTarget(B)
Draw()
Оба вызова Draw будут использовать один и тот же буфер глубины.
DrawText не изменяет установленный вами буфер глубины.Это предполагает, что вы намеревались сделать то, что сделали.