Warum ist doppelte Text auf den Z-Puffer mit einer anderen Textur gemacht zu werden, wenn D3DXFont mit :: DrawText?

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

  •  20-09-2019
  •  | 
  •  

Frage

Ich habe schon eine Weile über diese stolpern und wurde gefragt, ob jemand in dieses Problem, bevor ausgeführt wurde.

Die Anwendung arbeite ich an ist, mehrere Diagramme und einem einzigen Zeitleiste am unteren Rand des Bildschirms unterteilt. Jede Parzelle (die auf der Oberseite mehr Texturen geschichtet ist tatsächlich voneinander) sowie die Zeitleiste ist mit einer separaten Textur gerendert. Die Zeitleiste Textur wird zuerst durch jede der Handlung Texturen vom oberen Rand des Bildschirms auf den Boden übertragen, gefolgt. Ich bin mit DXUT und DirectX9 (März 2009).

Zeit Text in der Timeline Textur Nach dem Hinzufügen, bemerkte ich, dass der Text in der Titelleiste eines jeden Datenaufzeichnung wiederholt wurde. Hier ist ein screencap eines Teils der Anzeige, es zeigt nur eine einzige Handlung, aber der Text wiederholt auf jedem Grundstück geöffnet:

alt text

Es scheint, als ob es direkt an den DrawText in der Timeline gebunden Render-Funktion aufgerufen werden. Ich benutze relative Koordinaten als rect zu DrawText übergeben wird, aber da ich bereits das Renderziel auf die gewünschte Textur festgelegt habe es nur auf die aktuelle Textur beeinflussen sollte. Nicht jede Textur später gemacht.

Hat jemand jemals in irgendwelche Probleme ähnlich wie diese mit D3DXFont?

laufen

Bearbeiten : Nach einigen mehr Experimenten, sieht es so aus, es hat etwas mit dem Z-Puffer zu tun. Durch Zugabe von D3DCLEAR_ZBUFFER der klaren auf jeder Textur-Oberfläche, die doppelte Text verschwunden. Während das Problem jetzt umgangen scheint, bin ich immer noch neugierig, warum wurde der Z-Puffer für eine völlig getrennte Textur während meines DrawText Aufrufs geschrieben werden.

War es hilfreich?

Lösung

Der Z-Buffer-Zustand ist persistent.

Beispiel:

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

Beiden Anrufe zeichnen den gleichen Tiefenpuffer verwenden.

Der DrawText ist nicht die Änderung der Tiefenpuffer, dass Sie eingestellt haben. Es wird davon ausgegangen Sie bedeutete zu tun, was Sie getan haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top