2009-08-31 3 views
0

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

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

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

alt text

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

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

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

ответ

2

Состояние буфера Z устойчиво.

Например,

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

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

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