Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este tutorial muestra cómo utilizar las herramientas de diagnóstico de gráficos de Visual Studio para investigar un objeto que falta debido a un estado del dispositivo mal configurado.
Este tutorial explica cómo:
Use la Lista de eventos de gráficos para buscar los orígenes posibles del problema.
Utilice la ventana Etapas de canalización de gráficos para comprobar el efecto de las llamadas API de Direct3D de DrawIndexed.
Utilice la ventana Historial de píxeles de gráfico para localizar el problema concreto.
Inspeccione el estado del dispositivo en busca de posibles problemas o configuraciones incorrectas.
Escenario
Una de las razones por las que los objetos no aparecen donde se espera en una aplicación 3D es una configuración incorrecta del dispositivo gráfico que hace que los objetos que se excluyen de la representación, por ejemplo, cuando el orden de generación hace que los triángulos se seleccionen por error o cuando la función de prueba de profundidad hace que todos los píxeles del objeto se rechacen.
En el escenario descrito en este tutorial, se ha alcanzado el primer hito en el desarrollo de la aplicación 3D y está listo para probarlo por primera vez.Sin embargo, al ejecutar la aplicación, solo la interfaz de usuario se muestra en la pantalla.Al usar el diagnóstico de gráficos, puede capturar el problema en un archivo de registro de gráficos de modo que pueda depurar la aplicación.El problema tiene el siguiente aspecto en la aplicación:
.png)
Para obtener información sobre cómo capturar problemas de gráficos en un registro de gráficos, vea Capturar información de gráficos.
Investigación
Al usar el diagnóstico de gráficos, puede cargar el archivo de registro de gráficos para inspeccionar los marcos que se capturaron durante la prueba.
Para examinar un fotograma en un registro de gráficos
En Visual Studio, cargue un registro de gráficos que contenga un marco que tenga el modelo que falta.Una nueva pestaña Diagnósticos de gráficos aparece en Visual Studio.En la parte superior de esta pestaña está la salida del destino de representación del marco seleccionado.En la parte inferior está Lista de fotogramas, que muestra cada cuadro capturado como imagen en miniatura.
En la Lista de fotogramas, seleccione un marco que muestre que el modelo no se presenta.El destino de presentación se actualiza para reflejar el fotograma seleccionado.En este escenario, los gráficos registrar aspectos de la pestaña como el siguiente:
.png)
Después de seleccionar un marco que muestre el problema, puede usar la Lista de eventos gráficos para diagnosticarlo.La Lista de eventos de gráficos contiene cada llamada API de Direct3D para presentar el fotograma activo, por ejemplo, las llamadas API para configurar el estado del dispositivo, crear y actualizar los búferes, y dibujar los objetos que aparecen en el fotograma.Muchos tipos de llamadas son interesantes porque muchas veces (pero no siempre) hay un cambio correspondiente en destino de representación cuando la aplicación funciona según lo previsto, por ejemplo, las llamadas a Draw, Dispatch, Copy o Clear.Las llamadas a draw son especialmente interesantes porque cada una representa la geometría que la aplicación representó (las llamadas a Dispatch también pueden representar la geometría).
Para asegurarse de que se están realizando las llamadas a draw
Abra la ventana Lista de eventos gráficos.En la barra de herramientas Diagnóstico de gráfico, elija Lista de eventos.
Inspeccione la Lista de eventos gráficos para las llamadas a draw.Para que le resulte más fácil, escriba “Draw” en el cuadro Buscar de la esquina superior derecha de la ventana Lista de eventos gráficos.Esto filtra la lista de modo que solo contenga los eventos que contienen “Draw” en sus títulos.En este escenario, descubrirá que se realizaron varias llamadas a draw:
.png)
Después de que confirme que se hacen las llamadas de dibujo, puede determinar cuál se corresponde con la geometría que falta.Dado que sabe que la geometría que falta no se dibuja en el destino de representación (en este caso), puede usar la ventana Etapas de canalización de gráficos para determinar que llamada a draw se corresponde con la geometría que falta.La ventana Etapas de canalización de gráficos muestra la geometría que se envió a cada llamada a draw, sin importar su efecto en el destino de presentación.Mientras se desplaza por las llamadas de dibujo, las fases de la canalización se actualizan para mostrar la geometría asociada a esa llamada y se actualiza la salida del destino de representación para mostrar el estado del destino de representación después de completar la llamada.
Para buscar la llamada a draw para la geometría que falta
Abra la ventana Etapas de canalización de gráficos.En la barra de herramientas Diagnósticos de gráficos, elija Etapas de canalización.
Muévase a través de cada llamada a draw mientras observa la ventana Etapas de canalización de gráficos para buscar el modelo que falta.La fase de Ensamblador de entrada muestra los datos de modelo sin formato.La fase Sombreador de vértices muestra los datos de modelo transformados.La fase Sombreador de píxeles muestra el resultado del sombreador de píxeles.La fase de Fusión de salida muestra el destino de presentación combinado de esta llamada a draw y de todas las llamadas a draw previas.
Deténgase al alcanzar la llamada a draw que corresponde al modelo que falta.En este escenario, la ventana Etapas de canalización de gráficos indica que la geometría se representó pero no apareció en el destino de representación:
.png)
Después de que se confirme que la aplicación representó la geometría que falta y encuentre la llamada de dibujo correspondiente, puede seleccionar una parte del resultado de destino de presentación que debería mostrar la geometría que falta y después usar la ventana Historial de píxeles de gráfico para averiguar por qué se excluyeron los píxeles.El historial de píxeles contiene una lista de cada llamada a draw que puede haber tenido un efecto en un píxel determinado.Cada llamada a draw en la ventana Historial de píxeles de gráfico se identifica con un número que también se muestra en la ventana Lista de eventos gráficos.Esto ayuda a confirmar que el píxel debe mostrar la geometría que falta, y a averiguar por qué se excluyó el píxel
Para determinar por qué se excluyó el píxel
Abra la ventana Historial de píxeles de gráficos.En la barra de herramientas Diagnóstico de gráficos, elija Historial de píxeles.
Según la miniatura Sombreador de píxeles, seleccione un píxel en la salida del búfer de marcos que debería contener una parte de la geometría que falta.En este escenario, la salida del sombreador de píxeles debe cubrir la mayor parte del destino de representación; una vez seleccionado un píxel, la ventana Historial de píxeles de gráfico tiene el siguiente aspecto:
.png)
Confirme que el píxel seleccionado de destino de representación contiene una parte de la geometría, para lo cual se hace coincidir el número de llamadas a draw que está inspeccionando (desde la ventana de Lista de eventos gráficos) a una de las llamadas a draw en la ventana Historial de píxeles de gráfico.Si ninguna de las llamadas en la ventana Historial de píxeles de gráfico coincide con la llamada a draw que está revisando, repita estos pasos (excepto el paso 1) hasta que encuentre una coincidencia.En este escenario, la llamada a draw tiene el siguiente aspecto:
.png)
Cuando encuentre una coincidencia, expanda la llamada a draw correspondiente en la ventana Historial de píxeles de gráfico y confirme que el píxel se excluyó.Cada llamada a draw en la ventana Historial de píxeles de gráfico corresponde a uno o más primitivos geométricos (puntos, líneas o triángulos) que formaron un intersección con ese píxel como resultado de la geometría del objeto correspondiente.Cada una intersección puede contribuir al color final del píxel.Un primitivo que se excluye porque se ha producido un error en la prueba de profundidad está representado por un icono que muestra la letra Z sobre una flecha en sentido descendiente de izquierda a derecha.
Expanda un primitivo excluido para examinar detenidamente el estado que lo provocó que se excluyera.En el grupo Fusión de salida, mueva el puntero sobre Resultado.Una información sobre herramientas indica por qué el primitivo se excluyó.En este escenario, el examen revela que el primitivo se excluyó porque se produjo un error en la prueba de profundidad y, por tanto, no contribuyó al color final del píxel.
Después de determinar que no aparece la geometría porque los primitivos no han superado las pruebas de profundidad, es posible que sospeche que este problema está relacionado con el estado del dispositivo mal configurado.El estado del dispositivo y otros datos del objeto de Direct3D pueden ser examinados mediante la Tabla de objetos gráficos.
Para examinar el estado del dispositivo
Abra la ventana Tabla de objetos gráficos.En la barra de herramientas Diagnóstico de gráficos, elija Tabla de objetos.
Busque el objeto de Dispositivo D3D10 en la Tabla de objetos gráficos y, después, vuelva a abrir el objeto del Dispositivo D3D10.Una nueva pestaña de dispositivo d3d10 se abre en Visual Studio.Para que le resulte más fácil, puede ordenar la Tabla de objetos gráficos por Tipo:
.png)
Examine el estado del dispositivo que se muestra en la pestaña de Dispositivo d3d10 por si hubiera posibles problemas.Dado que la geometría no aparece porque los primitivos no han superado las pruebas de profundidad, puede centrarse en el estado del dispositivo, como los símbolos de profundidad, que afecta a la prueba de profundidad.En este escenario, la descripción del símbolo de profundidad (en estado de fusión de salida) contiene un valor poco común para el miembro de la función de profundidad, D3D10_COMPARISON_GREATER:
.png)
Después de determinar que la causa del problema de representación puede ser una función mal configurada de profundidad, puede usar esta información junto con su conocimiento del código para ubicar dónde se estableció la función de la profundidad incorrectamente y después corregir el problema.Si no está familiarizado con el código, podría buscar el problema con las pistas que recopiló en la depuración, por ejemplo, en función de la descripción de los símbolos de profundidad en este escenario, podría buscar el código para palabras como “profundidad” o “MAYOR”.Después de corregir el código, recompílelo y ejecute de nuevo la aplicación para detectar que el problema de representación se ha resuelto:
.png)