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

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

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

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

alt text

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

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

РЕДАКТИРОВАТЬ : После дополнительных экспериментов похоже, что это как-то связано с буфером Z. При добавлении D3DCLEAR_ZBUFFER для очистки на каждой поверхности текстуры дублирующийся текст исчезает. Пока проблема кажется обойденной, мне все еще интересно, почему Z-буфер для совершенно отдельной текстуры записывался во время моего вызова DrawText.

1 Ответ

2 голосов
/ 02 сентября 2009

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

Например,

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

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

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

...