Почему дублирующийся текст отображается в Z-буфере другой текстуры при использовании D3DXFont::DrawText?

StackOverflow https://stackoverflow.com/questions/1358896

  •  20-09-2019
  •  | 
  •  

Вопрос

Я некоторое время спотыкался об это, и мне было интересно, сталкивался ли кто-нибудь с этой проблемой раньше.

Приложение, над которым я работаю, разделено на несколько графиков данных и единую временную шкалу в нижней части экрана.Каждый график (который на самом деле представляет собой несколько текстур, наложенных друг на друга), а также временная шкала отображаются в отдельной текстуре.Сначала визуализируется текстура временной шкалы, за которой следует каждая из текстур графика от верхней части экрана до нижней.Я использую DXUT и DirectX9 (март 2009).

После добавления текста времени в текстуру временной шкалы я заметил, что текст повторяется в строке заголовка каждого графика данных.Вот скриншот части дисплея, на нем показан только один график, но текст повторяется на каждом открытом графике:

alt text

Похоже, что это напрямую связано с DrawText, вызываемым в функции рендеринга временной шкалы.Я использую относительные координаты в качестве прямоугольника, передаваемого в DrawText, но поскольку я уже установил для цели рендеринга желаемую текстуру, это должно влиять только на текущую текстуру.Не каждая текстура отрисовывается впоследствии.

Кто-нибудь когда-нибудь сталкивался с какими-либо проблемами, подобными этой, используя D3DXFont?

Редактировать:После еще некоторых экспериментов, похоже, это как-то связано с Z-буфером.При добавлении D3DCLEAR_ZBUFFER для очистки каждой текстурной поверхности дублирующийся текст исчезает.Хотя на данный момент проблема, кажется, обойдена, мне все еще любопытно, почему Z-буфер для совершенно отдельной текстуры записывался во время моего вызова DrawText.

Это было полезно?

Решение

Состояние буфера Z является постоянным.

Например,

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

Оба вызова Draw будут использовать один и тот же буфер глубины.

DrawText не изменяет установленный вами буфер глубины.Это предполагает, что вы намеревались сделать то, что сделали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top