¿Por qué es el texto duplicado que se queden en la memoria intermedia Z de una textura diferente cuando se utiliza D3DXFont :: DrawText?

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

  •  20-09-2019
  •  | 
  •  

Pregunta

He estado dando tumbos sobre esto durante un tiempo y me preguntaba si alguien se ha topado con este problema antes.

La aplicación que estoy trabajando se divide en múltiples tramas de datos y una sola línea de tiempo en la parte inferior de la pantalla. Cada parcela (que es realmente múltiples texturas en capas una encima de la otra), así como la línea de tiempo se representa a una textura separado. La textura línea de tiempo se procesa primero, seguido por cada uno de las texturas de la trama de la parte superior de la pantalla para la parte inferior. Estoy usando DXUT y DirectX9 (marzo de 2009).

Después de la adición de texto en tiempo a la textura línea de tiempo, me di cuenta de que el texto se repite en la barra de título de cada trama de datos. He aquí una screencap de una parte de la pantalla, se muestra una sola trama, pero el texto se repite en cada parcela se abrió:

text alt

Parece que está ligado directamente a la DrawText siendo llamado en función de hacer que la línea de tiempo. Hago uso de coordenadas relativas como el rect está pasando a DrawText, pero como ya he fijado el objetivo de hacer que la textura deseada sólo debería afectar a la textura actual. No todas las texturas rindió después.

¿Alguien ha topado con problemas similares a esto usando D3DXFont?

Editar : Después de un poco más de la experimentación, que parece que tiene algo que ver con el tampón Z. Mediante la adición de D3DCLEAR_ZBUFFER a la clara sobre cada superficie de la textura, el texto duplicado se ha ido. Mientras que el problema parece anulada por ahora, todavía estoy curioso en cuanto a por qué el búfer Z para una textura completamente separada estaba siendo escrito durante mi llamada DrawText.

¿Fue útil?

Solución

El estado Z Buffer es persistente.

Por ejemplo,

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

Tanto Draw llamadas utilizarán el mismo tampón profundidad.

El DrawText no está cambiando el buffer de profundidad que ha establecido. Se supone que usted pretende hacer lo que hizo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top