Compartir a través de


Tutorial: Depurar errores de representación debidos al sombreado

Este tutorial muestra cómo utilizar las herramientas de diagnóstico de gráficos de Visual Studio para investigar un objeto coloreado incorrectamente debido a un error del sombreador.

Este tutorial explica cómo:

  • Examine el documento del registro de gráficos para identificar los píxeles que muestran el problema.

  • Utilice la ventana Historial de píxeles de gráfico para examinar el estado del píxel más de cerca.

  • Utilice el depurador de HLSL para examinar los sombreadores de píxeles y vértices.

Escenario

El color incorrecto en objetos normalmente ocurre cuando un sombreador de vértices pasa un sombreador de píxeles incorrecto o información incompleta.

En este escenario, agregó recientemente un objeto a su aplicación, junto con nuevos sombreadores de vértices y de píxeles para transformar el objeto y conferirle un aspecto único. Cuando se ejecuta la aplicación durante una prueba, el objeto se presenta en negro sólido. Al usar el diagnóstico de gráficos, puede capturar el problema en un registro de gráficos de modo que pueda depurar la aplicación. El problema tiene el siguiente aspecto en la aplicación:

El objeto se presenta con colores incorrectos.

Investigación

Mediante las herramientas de Diagnósticos de gráficos, puede cargar el documento del registro de gráficos para inspeccionar los marcos que se capturaron durante la prueba.

Para examinar un fotograma en un registro de gráficos

  1. En Visual Studio, cargue un registro de gráficos que contenga un marco que tenga el modelo que falta. Una nueva ventana de documento del registro de gráficos aparece en Visual Studio. En la parte superior de esta ventana es la salida del destino de representación del fotograma seleccionado. En la parte inferior está Lista de fotogramas, que muestra cada cuadro capturado como imagen en miniatura.

  2. En la Lista de fotogramas, seleccione un marco en el que el objeto no tenga el aspecto correcto. El destino de presentación se actualiza para reflejar el fotograma seleccionado. En este escenario, la ventana de documento del registro de gráficos tiene el siguiente aspecto:

    Documento de registro de gráficos en Visual Studio.

Después de seleccionar un marco que muestre el problema, puede usar la ventana Historial de píxeles de gráfico para diagnosticarlo. La ventana Historial de píxel de gráficos muestra las primitivas que pudieron tener efecto en un píxel concreto, sus sombreadores y cuáles fueron sus efectos en el destino de presentación, en orden cronológico.

Para examinar un píxel

  1. 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.

  2. Seleccione un píxel para examinar. En la ventana de documento del registro de gráficos, seleccione uno de los píxeles del objeto que se colorea incorrectamente:

    Al seleccionar un píxel se muestra información sobre su historial.

    La ventana Historial de píxel de gráficos se actualiza para reflejar el píxel seleccionado. En este escenario, la ventana Historial de píxeles de gráfico tiene el siguiente aspecto:

    El historial de píxeles muestra un evento DrawIndexed.

    Observe que el resultado del sombreador de píxeles es el negro totalmente opaco (0, 0, 0, 1) y que Fusión de salida combinó esto con el color Anterior del píxel de manera que el Resultado también es negro totalmente opaco.

Después de examinar un píxel que se ha coloreado incorrectamente y detectar que el resultado del sombreador de píxeles no es del color esperado, puede usar el depurador de HLSL para examinar el sombreador de píxeles y averiguar qué sucedió con el color del objeto. Puede utilizar el depurador de HLSL para examinar el estado de las variables de HLSL durante la ejecución, ejecutar paso a paso el código HLSL, y establecer puntos de interrupción que le ayudarán a diagnosticar el problema.

Para examinar el sombreador de píxeles

  1. Comience a depurar el sombreador de píxeles. En la ventana Historial de píxeles de gráfico, en el primitivo del objeto, junto a Sombreador de píxeles, elija el botón Iniciar depuración.

  2. En este escenario, dado que el sombreador de píxeles ha atravesado el color desde el sombreador de vértices, es fácil observar que el sombreador de píxeles no es el origen del problema.

  3. Ponga el puntero sobre input.color. Observe que el valor es el negro lleno- opaca (0, 0, 0, 1).

    El miembro "color" de "input" es negro.

    En este escenario, el examen revela que color incorrecto es probablemente el resultado de un sombreador de vértices que no proporciona información de color correcta para que el sombreador de píxeles operan con.

Después de determinar que el sombreador de vértices no proporcionen probablemente a información correcta al sombreador de píxeles, el paso siguiente es examinar el sombreador de vértices.

Para examinar el sombreador de vértices

  1. Empiece a depurar el sombreador de vértices. En la ventana Historial de píxeles de gráfico, en el primitivo del objeto, junto a Sombreador de vértices, elija el botón Iniciar depuración.

  2. Busque la estructura de salida del sombreador de vértices, que es la entrada para el sombreador de píxeles. En este escenario, el nombre de esta estructura es output. Examine el código del sombreador de vértices y observe que han establecido al miembro de color de la estructura de output explícitamente el negro lleno- opaco, quizás como resultado alguien esfuerzos de depuración.

  3. Confirme que nunca se copian al miembro de color de la estructura de la entrada. Dado que el valor de output.color se establece en negro lleno- opaco justo antes de que se devuelve la estructura de output , es conveniente asegurarse de que el valor de output correctamente no se inicializó en una línea anterior. Recorra el código de sombreador de vértices hasta que llegue a la línea que establece output.color a negro mientras observa el valor de output.color. Observe que no se inicializa el valor de output.color hasta que se establezca en negro. Esto confirma que la línea de código que establezca output.color a negro debe ser modificada, en lugar de eliminado.

    El valor de "output.color" es negro.

Después de determinar que la causa del problema de representación es que el sombreador de vértices no proporciona el valor de color correcto al sombreador de píxeles, puede utilizar esta información para corregir el problema. En este escenario, puede corregirlo cambiando el código siguiente en el sombreador de vértices

output.color = float3(0.0f, 0.0f, 0.0f);

por

output.color = input.color;

Este código solo pasa el color del vértice a través de los vértices del objeto sin modificar; los sombreadores de vértices más complejos podrían modificar el color antes de pasarlo. El código corregido del sombreador de vértices debería ser similar a este:

Código del sombreador de vértices corregido.

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.

El objeto se presenta con los colores correctos.