Por que o texto duplicado está sendo renderizado no tampão Z de uma textura diferente ao usar o d3dxfont :: drawtext?
Pergunta
Eu tenho tropeçado por isso há um tempo e estava me perguntando se alguém já havia encontrado esse problema antes.
O aplicativo em que estou trabalhando é dividido em vários gráficos de dados e uma única linha do tempo na parte inferior da tela. Cada gráfico (que na verdade são várias texturas em camadas uma sobre a outra) e a linha do tempo é renderizada a uma textura separada. A textura da linha do tempo é renderizada primeiro, seguida por cada uma das texturas da plotagem da parte superior da tela para a parte inferior. Estou usando o DXUT e o DirectX9 (março de 2009).
Depois de adicionar o texto do tempo à textura da linha do tempo, notei que o texto foi repetido na barra de título de todos os gráficos de dados. Aqui está um screencap de uma parte da tela, ele mostra apenas um único enredo, mas o texto se repete em cada parcela aberta:
Parece que está ligado diretamente ao text de drawting que está sendo chamado na função de renderização da linha do tempo. Eu uso coordenadas relativas como o recreto que está sendo transmitido para o drawtext, mas como eu já definei o destino de renderização para a textura desejada, isso deve afetar apenas a textura atual. Nem toda textura renderizada depois.
Alguém já teve problemas semelhantes a isso usando o d3dxfont?
EDITAR: Depois de mais um pouco de experimentação, parece que tem algo a ver com o buffer Z. Ao adicionar d3dclear_zbuffer à limpeza em cada superfície da textura, o texto duplicado se foi. Embora o problema pareça ignorado por enquanto, ainda estou curioso para saber por que o buffer Z para uma textura completamente separada estava sendo escrita durante minha chamada de text de draw.
Solução
O estado de tampão Z é persistente.
Por exemplo,
SetDepthStencilSurface(X)
SetRenderTarget(A)
Draw()
SetRenderTarget(B)
Draw()
Ambas as chamadas de desenho usarão o mesmo buffer de profundidade.
O drawtext não está alterando o buffer de profundidade que você definiu. Ele pressupõe que você quis fazer o que fez.