2009-08-31 6 views
0

J'ai été trébucher sur cela pendant un moment et je me demandais si quelqu'un a déjà rencontré ce problème auparavant.Pourquoi le texte dupliqué est-il rendu sur le tampon Z d'une texture différente lors de l'utilisation de D3DXFont :: DrawText?

L'application sur laquelle je travaille est divisée en plusieurs tracés de données et un seul chronogramme en bas de l'écran. Chaque tracé (qui est en réalité plusieurs textures superposées) ainsi que le scénario sont rendus à une texture distincte. La texture de la timeline est rendue en premier, suivie de chacune des textures de tracé du haut de l'écran vers le bas. J'utilise DXUT et DirectX9 (mars 2009). Après avoir ajouté du texte temporel à la texture de la timeline, j'ai remarqué que le texte était répété dans la barre de titre de chaque graphe de données. Voici une screencap d'une partie de l'écran, il montre juste une seule parcelle, mais le texte se répète sur chaque parcelle ouvert:

alt text

Il semble que ce soit directement lié à l'DrawText être appelé dans la chronologie de fonction de rendu. J'utilise les coordonnées relatives comme le rect étant passé à DrawText, mais puisque j'ai déjà défini la cible de rendu à la texture désirée, elle devrait seulement affecter la texture actuelle. Pas toutes les textures rendues après.

Est-ce que quelqu'un a déjà rencontré des problèmes similaires avec D3DXFont?

EDIT: Après un peu plus d'expérimentation, il semble que cela ait quelque chose à voir avec le tampon Z. En ajoutant D3DCLEAR_ZBUFFER à l'espace libre sur chaque surface de texture, le texte en double est parti. Bien que le problème semble pour l'instant ignoré, je suis toujours curieux de savoir pourquoi le tampon Z pour une texture complètement séparée a été écrit pendant mon appel DrawText.

Répondre

2

L'état Z Buffer est persistant.

Par exemple,

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

Les deux Dessinez appels utiliseront le même tampon de profondeur.

Le DrawText ne modifie pas le tampon de profondeur que vous avez défini. Cela suppose que vous vouliez faire ce que vous avez fait.

Questions connexes