Pourquoi le texte en double étant rendu sur le tampon Z d'une texture différente lors de l'utilisation D3DXFont :: DrawText?

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

  •  20-09-2019
  •  | 
  •  

Question

J'ai trébuchant sur ce pendant un certain temps et je me demandais si quelqu'un a rencontré ce problème avant.

L'application je travaille est divisé en plusieurs parcelles de données et un calendrier unique en bas de l'écran. Chaque parcelle (qui est en fait plusieurs textures couches sur le dessus de l'autre), ainsi que la ligne de temps est rendu à une texture séparée. La texture de la chronologie est rendue en premier, suivi par chacune des textures de terrain à partir du haut de l'écran vers le bas. J'utilise DXUT et DirectX9 (Mars 2009).

Après l'ajout de texte de temps à la texture de la chronologie, je remarquais que le texte a été répété dans la barre de titre de chaque parcelle 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:

text alt

Il semble que ce soit directement lié à l'DrawText appelée dans la fonction render de la timeline. J'utilise les coordonnées relatives comme rect étant passé à DrawText, mais comme je l'ai déjà fixé pour objectif de rendre à la texture désirée, il ne devrait affecter la texture actuelle. Pas toutes les textures rendu par la suite.

Quelqu'un at-il déjà rencontré des problèmes similaires à cela en utilisant D3DXFont?

EDIT : Après un peu plus d'expérimentation, on dirait qu'il a quelque chose à voir avec le tampon Z. En ajoutant D3DCLEAR_ZBUFFER au clair sur chaque surface de la texture, le texte en double est disparu. Alors que le problème semble contournée pour l'instant, je suis toujours curieux de savoir pourquoi le tampon Z pour une texture complètement séparée a été écrite pendant mon appel DrawText.

Était-ce utile?

La solution

L'état Z du tampon est persistante.

Par exemple,

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

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

Le DrawText ne change pas la mémoire tampon de profondeur que vous avez défini. Il suppose que vous vouliez faire ce que vous avez fait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top